extern int _dlerror_run (void (*operate) (void *), void *args); extern void _dl_signal_error (int errcode,const char *objname,const char *errstring); int dlnam(void *handle, char *filename, int len) { struct link_map *map = handle; void doit (void *a) { if (handle == NULL) _dl_signal_error (0, NULL, "Null dll handle is invalid"); else { if ( (strlen(map->l_name) + 1) <= len ) strcpy(filename, map->l_name); else _dl_signal_error (0, NULL, "Not enough memory to return the dll name"); } } return _dlerror_run (doit,(void *)NULL) ? -1 : strlen(map->l_name); }