loggify eina_module, adding couple of debug info.

SVN revision: 42194
This commit is contained in:
Gustavo Sverzut Barbieri 2009-09-02 23:06:55 +00:00
parent c1e2a300e4
commit 2f8ded1037
2 changed files with 47 additions and 8 deletions

View File

@ -49,6 +49,8 @@
#define READBUFSIZ 65536
#define EINA_LOG_COLOR_DEFAULT "\033[36m"
/* eina magic types */
#define EINA_MAGIC_STRINGSHARE 0x98761234
#define EINA_MAGIC_STRINGSHARE_NODE 0x98761235

View File

@ -58,6 +58,7 @@ void *alloca (size_t);
#include "eina_error.h"
#include "eina_module.h"
#include "eina_file.h"
#include "eina_log.h"
/*============================================================================*
* Local *
@ -67,6 +68,11 @@ void *alloca (size_t);
* @cond LOCAL
*/
static int EINA_MODULE_LOG_DOM = -1;
#define ERR(...) EINA_LOG_DOM_ERR(EINA_MODULE_LOG_DOM, __VA_ARGS__)
#define WRN(...) EINA_LOG_DOM_WARN(EINA_MODULE_LOG_DOM, __VA_ARGS__)
#define DBG(...) EINA_LOG_DOM_DBG(EINA_MODULE_LOG_DOM, __VA_ARGS__)
#if defined(_WIN32) || defined(__CYGWIN__)
# define MODULE_EXTENSION ".dll"
#else
@ -118,9 +124,9 @@ static void _dir_list_cb(const char *name, const char *path, void *data)
size_t length;
length = strlen(name);
if (length < strlen(MODULE_EXTENSION) + 1) /* x.so */
if (length < sizeof(MODULE_EXTENSION)) /* x.so */
return;
if (!strcmp(name + length - strlen(MODULE_EXTENSION),
if (!strcmp(name + length - sizeof(MODULE_EXTENSION) + 1,
MODULE_EXTENSION))
{
char *file;
@ -203,9 +209,25 @@ eina_module_init(void)
if (_eina_module_count != 1)
goto end_init;
if (!eina_log_init())
{
fprintf(stderr, "Could not initialize eina logging module.\n");
return 0;
}
EINA_MODULE_LOG_DOM = eina_log_domain_register
("eina_module", EINA_LOG_COLOR_DEFAULT);
if (EINA_MODULE_LOG_DOM < 0)
{
EINA_LOG_ERR("Could not register log domain: eina_module\n");
eina_log_shutdown();
return 0;
}
if (!eina_error_init())
{
fprintf(stderr, "Could not initialize eina error module.\n");
ERR("Could not initialize eina error module.\n");
eina_log_shutdown();
return 0;
}
@ -243,6 +265,10 @@ eina_module_shutdown(void)
* delete the list of modules here
*/
eina_log_domain_unregister(EINA_MODULE_LOG_DOM);
EINA_MODULE_LOG_DOM = -1;
eina_log_shutdown();
end_shutdown:
return _eina_module_count;
}
@ -274,6 +300,7 @@ EAPI Eina_Module *eina_module_new(const char *file)
m->file = strdup(file);
m->ref = 0;
m->handle = NULL;
DBG("m=%p, file=%s\n", m, file);
return m;
}
@ -293,6 +320,8 @@ EAPI Eina_Bool eina_module_free(Eina_Module *m)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
DBG("m=%p, handle=%p, file=%s, refs=%d\n", m, m->handle, m->file, m->ref);
if (m->handle)
{
if (eina_module_unload(m) == EINA_FALSE)
@ -330,13 +359,14 @@ EAPI Eina_Bool eina_module_load(Eina_Module *m)
EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
DBG("m=%p, handle=%p, file=%s, refs=%d\n", m, m->handle, m->file, m->ref);
if (m->handle) goto loaded;
dl_handle = dlopen(m->file, RTLD_NOW);
if (!dl_handle)
{
EINA_ERROR_PDBG("could not dlopen(\"%s\", RTLD_NOW): %s\n",
m->file, dlerror());
WRN("could not dlopen(\"%s\", RTLD_NOW): %s\n", m->file, dlerror());
eina_error_set(EINA_ERROR_WRONG_MODULE);
return EINA_FALSE;
}
@ -347,13 +377,17 @@ EAPI Eina_Bool eina_module_load(Eina_Module *m)
if ((*initcall)() == EINA_TRUE)
goto ok;
WRN("could not find eina's entry symbol %s inside module %s\n",
EINA_MODULE_SYMBOL_INIT, m->file);
eina_error_set(EINA_ERROR_MODULE_INIT_FAILED);
dlclose(dl_handle);
return EINA_FALSE;
ok:
DBG("successfully loaded %s", m->file);
m->handle = dl_handle;
loaded:
m->ref++;
DBG("ref %d", m->ref);
eina_error_set(0);
return EINA_TRUE;
@ -378,6 +412,8 @@ EAPI Eina_Bool eina_module_unload(Eina_Module *m)
Eina_Module_Shutdown *shut;
EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
DBG("m=%p, handle=%p, file=%s, refs=%d\n", m, m->handle, m->file, m->ref);
m->ref--;
if (!m->ref)
{
@ -386,6 +422,7 @@ EAPI Eina_Bool eina_module_unload(Eina_Module *m)
(*shut)();
dlclose(m->handle);
m->handle = NULL;
DBG("unloaded module %s\n", m->file);
return EINA_TRUE;
}
return EINA_FALSE;
@ -534,7 +571,7 @@ EAPI void eina_module_list_load(Eina_Array *array)
unsigned int i;
EINA_SAFETY_ON_NULL_RETURN(array);
DBG("array %p, count %u\n", array, array->count);
EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
eina_module_load(m);
}
@ -550,7 +587,7 @@ EAPI void eina_module_list_unload(Eina_Array *array)
unsigned int i;
EINA_SAFETY_ON_NULL_RETURN(array);
DBG("array %p, count %u\n", array, array->count);
EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
eina_module_unload(m);
}
@ -566,7 +603,7 @@ EAPI void eina_module_list_flush(Eina_Array *array)
unsigned int i;
EINA_SAFETY_ON_NULL_RETURN(array);
DBG("array %p, count %u\n", array, array->count);
EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
eina_module_free(m);