From: Gary V. Vaughan Date: Thu, 15 Jul 2004 12:26:28 +0000 (+0000) Subject: Collapse two almost identical structures into one: X-Git-Tag: release-1-9b~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52de761d29bff6934ac2573fec611ec65e7af07a;p=thirdparty%2Flibtool.git Collapse two almost identical structures into one: * libltdl/lt_dlloader.h (lt_dlloader): Add next field. * libltdl/ltdl.c (lt_user_dlloader): Remove entirely. Change all callers to use lt_dlloader instead. Add a compatibility macro. (lt_dlloader_add): Remove copy and allocate stage, just hook directly into the loaders list. --- diff --git a/ChangeLog b/ChangeLog index dbe958738..a286dad7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2004-07-15 Gary V. Vaughan + + Collapse two almost identical structures into one: + + * libltdl/lt_dlloader.h (lt_dlloader): Add next field. + * libltdl/ltdl.c (lt_user_dlloader): Remove entirely. Change all + callers to use lt_dlloader instead. Add a compatibility macro. + (lt_dlloader_add): Remove copy and allocate stage, just hook + directly into the loaders list. + 2004-07-15 Gary V. Vaughan A cleaner way to access the private fields of an lt_dlhandle diff --git a/libltdl/loaders/dld_link.c b/libltdl/loaders/dld_link.c index 1b8b9c42f..51a4d59a8 100644 --- a/libltdl/loaders/dld_link.c +++ b/libltdl/loaders/dld_link.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable dld_link_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -49,10 +49,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/loaders/dlopen.c b/libltdl/loaders/dlopen.c index af24578cd..cfb9a9277 100644 --- a/libltdl/loaders/dlopen.c +++ b/libltdl/loaders/dlopen.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable dlopen_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -49,10 +49,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/loaders/dyld.c b/libltdl/loaders/dyld.c index bd112d427..0d994b07f 100644 --- a/libltdl/loaders/dyld.c +++ b/libltdl/loaders/dyld.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable dyld_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -51,10 +51,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/loaders/load_add_on.c b/libltdl/loaders/load_add_on.c index 7ae6bda21..d29bd8261 100644 --- a/libltdl/loaders/load_add_on.c +++ b/libltdl/loaders/load_add_on.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable load_add_on_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -49,10 +49,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/loaders/loadlibrary.c b/libltdl/loaders/loadlibrary.c index 210217a27..df123d6cb 100644 --- a/libltdl/loaders/loadlibrary.c +++ b/libltdl/loaders/loadlibrary.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable loadlibrary_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -49,10 +49,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/loaders/preopen.c b/libltdl/loaders/preopen.c index d9483804c..171bcc273 100644 --- a/libltdl/loaders/preopen.c +++ b/libltdl/loaders/preopen.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable preopen_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -51,10 +51,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/loaders/shl_load.c b/libltdl/loaders/shl_load.c index 6cd520140..20635aa1b 100644 --- a/libltdl/loaders/shl_load.c +++ b/libltdl/loaders/shl_load.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA be fetched from the preloaded symbol list by lt_dlsym(): */ #define get_vtable shl_load_LTX_get_vtable -extern lt_user_dlloader *get_vtable (lt_user_data loader_data); +extern lt_dlloader *get_vtable (lt_user_data loader_data); /* Boilerplate code to set up the vtable for hooking this loader into @@ -49,10 +49,10 @@ static void * vm_sym (lt_user_data loader_data, lt_module module, /* Return the vtable for this loader, only the name and sym_prefix attributes (plus the virtual function implementations, obviously) change between loaders. */ -lt_user_dlloader * +lt_dlloader * get_vtable (lt_user_data loader_data) { - static lt_user_dlloader *vtable = 0; + static lt_dlloader *vtable = 0; if (!vtable) { diff --git a/libltdl/lt_dlloader.h b/libltdl/lt_dlloader.h index b97ad159e..7fd1f904f 100644 --- a/libltdl/lt_dlloader.h +++ b/libltdl/lt_dlloader.h @@ -35,15 +35,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA LT_BEGIN_C_DECLS -typedef struct lt_user_dlloader lt_user_dlloader; typedef struct lt_dlloader lt_dlloader; typedef void * lt_user_data; typedef void * lt_module; /* Type of a function to get a loader's vtable: */ -typedef lt_user_dlloader *lt_get_vtable (lt_user_data loader_data); +typedef lt_dlloader *lt_get_vtable (lt_user_data loader_data); -/* Function pointer types for creating user defined module loaders: */ +/* Function pointer types for module loader vtable entries: */ typedef int lt_dlloader_init (lt_user_data loader_data); typedef int lt_dlloader_exit (lt_user_data loader_data); typedef lt_module lt_module_open (lt_user_data loader_data, @@ -58,7 +57,10 @@ typedef enum { LT_DLLOADER_PREPEND = 0, LT_DLLOADER_APPEND } lt_dlloader_priority; -struct lt_user_dlloader { +/* This structure defines a module loader, as populated by the get_vtable + entry point of each loader. */ +struct lt_dlloader { + lt_dlloader * next; const char * name; const char * sym_prefix; lt_module_open * module_open; @@ -70,14 +72,19 @@ struct lt_user_dlloader { lt_dlloader_priority priority; }; -LT_SCOPE lt_dlloader *lt_dlloader_next (lt_dlloader *place); -LT_SCOPE lt_dlloader *lt_dlloader_find (const char *loader_name); -LT_SCOPE const char *lt_dlloader_name (lt_dlloader *place); -LT_SCOPE lt_user_data *lt_dlloader_data (lt_dlloader *place); -LT_SCOPE int lt_dlloader_add - (const struct lt_user_dlloader *dlloader, - lt_user_data data); -LT_SCOPE int lt_dlloader_remove (const char *loader_name); +LT_SCOPE lt_dlloader * lt_dlloader_next (lt_dlloader *place); +LT_SCOPE lt_dlloader * lt_dlloader_find (const char *name); +LT_SCOPE const char * lt_dlloader_name (lt_dlloader *place); +LT_SCOPE lt_user_data * lt_dlloader_data (lt_dlloader *place); +LT_SCOPE int lt_dlloader_add (lt_dlloader *dlloader, + lt_user_data data); +LT_SCOPE int lt_dlloader_remove (const char *name); + + + +/* --- Backwards source compatibility --- */ + +#define lt_user_dlloader lt_dlloader LT_END_C_DECLS diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c index a78c4fd84..c519227f3 100644 --- a/libltdl/ltdl.c +++ b/libltdl/ltdl.c @@ -57,23 +57,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA #define LT_SYMBOL_OVERHEAD 5 - - -/* --- OPAQUE STRUCTURES DECLARED IN LTDL.H --- */ - - -/* This structure is used for the list of registered loaders. */ -struct lt_dlloader { - struct lt_dlloader *next; - const char *loader_name; /* identifying name for each loader */ - const char *sym_prefix; /* prefix for symbols */ - lt_module_open *module_open; - lt_module_close *module_close; - lt_find_sym *find_sym; - lt_dlloader_exit *dlloader_exit; - lt_user_data dlloader_data; -}; - /* Various boolean flags can be stored in the flags field of an lt_dlhandle_struct... */ #define LT_DLGET_FLAG(handle, flag) (((handle)->flags & (flag)) == (flag)) @@ -177,7 +160,7 @@ loader_init_callback (lt_dlhandle handle) static int loader_init (lt_get_vtable *vtable_func, lt_user_data data) { - lt_user_dlloader *vtable = 0; + lt_dlloader *vtable = 0; int errors = 0; if (vtable_func) @@ -216,7 +199,7 @@ loader_init (lt_get_vtable *vtable_func, lt_user_data data) #define get_vtable preopen_LTX_get_vtable #define preloaded_symbols LT_CONC3(lt_, LTDLOPEN, _LTX_preloaded_symbols) -extern lt_user_dlloader * get_vtable (lt_user_data data); +extern lt_dlloader * get_vtable (lt_user_data data); extern lt_dlsymlist preloaded_symbols; /* Initialize libltdl. */ @@ -2138,11 +2121,10 @@ lt_dlcaller_get_data (lt_dlcaller_id key, lt_dlhandle handle) int -lt_dlloader_add (const struct lt_user_dlloader *dlloader, - lt_user_data data) +lt_dlloader_add (lt_dlloader *dlloader, lt_user_data data) { int errors = 0; - lt_dlloader *node = 0, *ptr = 0; + lt_dlloader *ptr = 0; if ((dlloader == 0) /* diagnose null parameters */ || (dlloader->module_open == 0) @@ -2153,35 +2135,19 @@ lt_dlloader_add (const struct lt_user_dlloader *dlloader, return 1; } - /* Create a new dlloader node with copies of the user callbacks. */ - node = lt__malloc (sizeof *node); - if (!node) - return 1; - - /* There is no need to record the dlloader->dlloader_init function, - since we won't need it again. */ - node->next = 0; - node->loader_name = dlloader->name; - node->sym_prefix = dlloader->sym_prefix; - node->module_open = dlloader->module_open; - node->module_close = dlloader->module_close; - node->find_sym = dlloader->find_sym; - node->dlloader_exit = dlloader->dlloader_exit; - node->dlloader_data = dlloader->dlloader_data; - switch (dlloader->priority) { case LT_DLLOADER_PREPEND: /* Tack NODE on the front of the LOADERS list. */ - node->next = loaders; - loaders = node; + dlloader->next = loaders; + loaders = dlloader; break; case LT_DLLOADER_APPEND: /* Add NODE to the end of the LOADERS list. */ for (ptr = loaders; ptr->next; ptr = ptr->next) /*NOWORK*/; - ptr->next = node; + ptr->next = dlloader; break; default: @@ -2194,9 +2160,9 @@ lt_dlloader_add (const struct lt_user_dlloader *dlloader, } int -lt_dlloader_remove (const char *loader_name) +lt_dlloader_remove (const char *name) { - lt_dlloader *place = lt_dlloader_find (loader_name); + lt_dlloader *place = lt_dlloader_find (name); lt_dlhandle handle; int errors = 0; @@ -2227,7 +2193,7 @@ lt_dlloader_remove (const char *loader_name) lt_dlloader *prev; for (prev = loaders; prev->next; prev = prev->next) { - if (streq (prev->next->loader_name, loader_name)) + if (streq (prev->next->name, name)) { break; } @@ -2260,7 +2226,7 @@ lt_dlloader_name (lt_dlloader *place) if (place) { - name = place ? place->loader_name : 0; + name = place ? place->name : 0; } else { @@ -2288,13 +2254,13 @@ lt_dlloader_data (lt_dlloader *place) } lt_dlloader * -lt_dlloader_find (const char *loader_name) +lt_dlloader_find (const char *name) { lt_dlloader *place = 0; for (place = loaders; place; place = place->next) { - if (streq (place->loader_name, loader_name)) + if (streq (place->name, name)) { break; }