Posted to tcl by chw at Thu Apr 25 06:13:23 GMT 2019view raw
- #define _GNU_SOURCE
- #include <string.h>
- #include <stdlib.h>
- #include <dlfcn.h>
- /*
- * Find containing shared library and return its
- * file name in allocated string which the caller
- * must free. Might work at least on Linux.
- */
- char *self_discovery(void)
- {
- void *dl;
- int (*dla)(void *, Dl_info *);
- Dl_info dli;
- char *result = NULL;
- dl = dlopen("libdl.so.2", RTLD_NOW);
- if (dl) {
- dla = dlsym(dl, "dladdr");
- if (dla) {
- memset(&dli, 0, sizeof(dli));
- if (dla(self_discovery, &dli) && dli.dli_sname && dli.dli_fname[0]) {
- result = malloc(strlen(dli.dli_fname) + 1);
- if (result) {
- strcpy(result, dli.dli_fname);
- }
- }
- }
- dlclose(dl);
- }
- return result;
- }
Comments
Posted by chw at Thu Apr 25 06:14:51 GMT 2019 [text] [code]
hypnotoad: we talked yesterday about embedding zip file systems in shared libraries...