rem: loaders = NULL;
add: loaders = 0;
context: static	int	tryall_dlopen	      LT_PARAMS((lt_dlhandle *handle,						 const char *filename));static	int	unload_deplibs	      LT_PARAMS((lt_dlhandle handle));static	int	lt_argz_insert	      LT_PARAMS((char **pargz,						 size_t *pargz_len,						 char *before,						 const char *entry));static	int	lt_argz_insertinorder LT_PARAMS((char **pargz,						 size_t *pargz_len,						 const char *entry));static	int	lt_argz_insertdir     LT_PARAMS((char **pargz,						 size_t *pargz_len,						 const char *dirnam,						 struct dirent *dp));static	int	lt_dlpath_insertdir   LT_PARAMS((char **ppath,						 char *before,						 const char *dir));static	int	list_files_by_dir     LT_PARAMS((const char *dirnam,						 char **pargz,						 size_t *pargz_len));static	int	file_not_found	      LT_PARAMS((void));static	char	       *user_search_path= NULL;static	lt_dlloader    *loaders		= NULL;static	lt_dlhandle	handles 	= NULL;static	int		initialized 	= 0;/* Initialize libltdl. */intlt_dlinit (){  int	      errors   = 0;  LT_DLMUTEX_LOCK ();  /* Initialize only at first call. */  if (++initialized == 1)    {      handles = NULL;      user_search_path = NULL; /* empty search path */#if HAVE_LIBDL && !defined(__CYGWIN__)      errors += lt_dlloader_add (lt_dlloader_next (0), &sys_dl, "dlopen");#endif#if HAVE_SHL_LOAD      errors += lt_dlloader_add (lt_dlloader_next (0), &sys_shl, "dlopen");#endif#ifdef __WINDOWS__      errors += lt_dlloader_add (lt_dlloader_next (0), &sys_wll, "dlopen");#endif#ifdef __BEOS__      errors += lt_dlloader_add (lt_dlloader_next (0), &sys_bedl, "dlopen");#endif#if HAVE_DLD      errors += lt_dlloader_add (lt_dlloader_next (0), &sys_dld, "dld");#endif      errors += lt_dlloader_add (lt_dlloader_next (0), &presym, "dlpreload");      if (presym_init (presym.dlloader_data))	{	  LT_DLMUTEX_SETERROR (LT_DLSTRERROR (INIT_LOADER));	  ++errors;	}      else if (errors != 0)	{	  LT_DLMUTEX_SETERROR (LT_DLSTRERROR (DLOPEN_NOT_SUPPORTED));	  ++errors;	}    }  LT_DLMUTEX_UNLOCK ();  return errors;}intlt_dlpreload (preloaded)     const lt_dlsymlist *preloaded;{  int errors = 0;  if (preloaded)    {      errors = presym_add_symlist (preloaded);    }  else    {      presym_free_symlists();      LT_DLMUTEX_LOCK ();      if (default_preloaded_symbols)	{	  errors = lt_dlpreload (default_preloaded_symbols);	}      LT_DLMUTEX_UNLOCK ();    }  return errors;}intlt_dlpreload_default (preloaded)     const lt_dlsymlist *preloaded;{  LT_DLMUTEX_LOCK ();  default_preloaded_symbols = preloaded;  LT_DLMUTEX_UNLOCK ();  return 0;}intlt_dlexit (){  /* shut down libltdl */  lt_dlloader *loader;  int	       errors   = 0;  LT_DLMUTEX_LOCK ();  loader = loaders;  if (!initialized)    {      LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SHUTDOWN));      ++errors;      goto done;    }  /* shut down only at last call. */  if (--initialized == 0)    {      int	level;      while (handles && LT_DLIS_RESIDENT (handles))	{	  handles = handles->next;	}      /* close all modules */      for (level = 1; handles; ++level)	{	  lt_dlhandle cur = handles;	  int saw_nonresident = 0;	  while (cur)	    {	      lt_dlhandle tmp = cur;	      cur = cur->next;	      if (!LT_DLIS_RESIDENT (tmp))		saw_nonresident = 1;	      if (!LT_DLIS_RESIDENT (tmp) && tmp->info.ref_count <= level)		{		  if (lt_dlclose (tmp))		    {		      ++errors;		    }		}	    }	  /* done if only resident modules are left */	  if (!saw_nonresident)	    break;	}      /* close all loaders */      while (loader)	{	  lt_dlloader *next = loader->next;	  lt_user_data data = loader->dlloader_data;	  if (loader->dlloader_exit && loader->dlloader_exit (data))	    {	      ++errors;	    }	  LT_DLMEM_REASSIGN (loader, next);	}      loaders = NULL;    } done:  LT_DLMUTEX_UNLOCK ();  return errors;}static inttryall_dlopen (handle, filename)     lt_dlhandle *handle;     const char *filename;{  lt_dlhandle	 cur;  lt_dlloader   *loader;  const char	*saved_error;  int		 errors		= 0;  LT_DLMUTEX_GETERROR (saved_error);  LT_DLMUTEX_LOCK ();  cur	 = handles;  loader = loaders;  /* check whether the module was already opened */  while (cur)    {      /* try to dlopen the program itself? */      if (!cur->info.filename && !filename)	{	  break;	}      if (cur->info.filename && filename	  && strcmp (cur->info.filename, filename) == 0)	{	  break;	}      cur = cur->next;    }  if (cur)    {      ++cur->info.ref_count;      *handle = cur;      goto done;    }  cur = *handle;  if (filename)    {      cur->info.filename = lt_estrdup (filename);      if (!cur->info.filename)	{	  ++errors;	  goto done;	}    }  else    {      cur->info.filename = NULL;    }  while (loader)    {      lt_user_data data = loader->dlloader_data;      cur->module = loader->module_open (data, filename);      if (cur->module != NULL)	{	  break;	}      loader = loader->next;    }  if (!loader)    {      LT_DLFREE (cur->info.filename);      ++errors;      goto done;    }  cur->loader	= loader;  LT_DLMUTEX_SETERROR (saved_error); done:  LT_DLMUTEX_UNLOCK ();  return errors;}