library: Add option to register additional namespaces before calling library_init()
Because settings are already accessed in library_init(), calling add_fallback() externally after calling library_init() is not ideal. This way namespaces already serve as fallback while library_init() is executed and they are also in the correct order so that libstrongswan is always the last root section.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2009 Tobias Brunner
|
* Copyright (C) 2009-2016 Tobias Brunner
|
||||||
* Copyright (C) 2008 Martin Willi
|
* Copyright (C) 2008 Martin Willi
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
@@ -61,6 +61,31 @@ struct private_library_t {
|
|||||||
refcount_t ref;
|
refcount_t ref;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MAX_NAMESPACES 5
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Additional namespaces registered using __atrribute__((constructor))
|
||||||
|
*/
|
||||||
|
static char *namespaces[MAX_NAMESPACES];
|
||||||
|
static int ns_count;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Described in header
|
||||||
|
*/
|
||||||
|
void library_add_namespace(char *ns)
|
||||||
|
{
|
||||||
|
if (ns_count < MAX_NAMESPACES - 1)
|
||||||
|
{
|
||||||
|
namespaces[ns_count] = ns;
|
||||||
|
ns_count++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to register additional namespace alias, please "
|
||||||
|
"increase MAX_NAMESPACES");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* library instance
|
* library instance
|
||||||
*/
|
*/
|
||||||
@@ -248,6 +273,7 @@ bool library_init(char *settings, const char *namespace)
|
|||||||
{
|
{
|
||||||
private_library_t *this;
|
private_library_t *this;
|
||||||
printf_hook_t *pfh;
|
printf_hook_t *pfh;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (lib)
|
if (lib)
|
||||||
{ /* already initialized, increase refcount */
|
{ /* already initialized, increase refcount */
|
||||||
@@ -311,6 +337,11 @@ bool library_init(char *settings, const char *namespace)
|
|||||||
(hashtable_equals_t)equals, 4);
|
(hashtable_equals_t)equals, 4);
|
||||||
|
|
||||||
this->public.settings = settings_create(this->public.conf);
|
this->public.settings = settings_create(this->public.conf);
|
||||||
|
/* add registered aliases */
|
||||||
|
for (i = 0; i < ns_count; ++i)
|
||||||
|
{
|
||||||
|
lib->settings->add_fallback(lib->settings, lib->ns, namespaces[i]);
|
||||||
|
}
|
||||||
/* all namespace settings may fall back to libstrongswan */
|
/* all namespace settings may fall back to libstrongswan */
|
||||||
lib->settings->add_fallback(lib->settings, lib->ns, "libstrongswan");
|
lib->settings->add_fallback(lib->settings, lib->ns, "libstrongswan");
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2014 Tobias Brunner
|
* Copyright (C) 2010-2016 Tobias Brunner
|
||||||
* Copyright (C) 2008 Martin Willi
|
* Copyright (C) 2008 Martin Willi
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
@@ -276,4 +276,14 @@ void library_deinit();
|
|||||||
*/
|
*/
|
||||||
extern library_t *lib;
|
extern library_t *lib;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add additional names used as alias for the namespace registered with
|
||||||
|
* library_init().
|
||||||
|
*
|
||||||
|
* To be called from __attribute__((constructor)) functions.
|
||||||
|
*
|
||||||
|
* @param ns additional namespace
|
||||||
|
*/
|
||||||
|
void library_add_namespace(char *ns);
|
||||||
|
|
||||||
#endif /** LIBRARY_H_ @}*/
|
#endif /** LIBRARY_H_ @}*/
|
||||||
|
|||||||
Reference in New Issue
Block a user