* RTLD_LAZY and not RTLD_NOW (NetBSD problem)

* Indent of plugin code
Initial
Stephane Bortzmeyer 20 years ago
parent 7671c535bc
commit 70c4dfb776

@ -190,20 +190,17 @@ main (argc, argv)
{ {
results[i].valid = 0; results[i].valid = 0;
} }
progname = (char *) argv[0]; progname = (char *) argv[0];
poptcon = poptGetContext (NULL, argc, poptcon = poptGetContext (NULL, argc, argv, options, 0);
argv,
options,
0);
while ((!module_find) && (result = poptGetNextOpt (poptcon)) != -1) while ((!module_find) && (result = poptGetNextOpt (poptcon)) != -1)
{ {
if (result < -1) if (result < -1)
{ {
printf ("%s: %s", printf ("%s: %s",
poptBadOption (poptcon, POPT_BADOPTION_NOALIAS), poptBadOption (poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror (result)); poptStrerror (result));
usage (); usage ();
} }
remaining--; remaining--;
@ -431,19 +428,22 @@ main (argc, argv)
leftover = (char **) &argv[argc - remaining]; leftover = (char **) &argv[argc - remaining];
if (plugin_name) if (plugin_name)
{ {
ext = strstr(plugin_name, ".so"); ext = strstr (plugin_name, ".so");
if ((ext == NULL) || (strcmp (ext, ".so") != 0)) if ((ext == NULL) || (strcmp (ext, ".so") != 0))
sprintf (plugin_name, "%s.so", plugin_name); sprintf (plugin_name, "%s.so", plugin_name);
plugin = dlopen (plugin_name, RTLD_NOW); /* RTLD_NOW makes dlopen fail silently on NetBSD */
if (!plugin) { /* retries with the absolute name */ plugin = dlopen (plugin_name, RTLD_LAZY);
complete_plugin_name = (char *) malloc(MAX_LINE); if (!plugin)
sprintf (complete_plugin_name, "%s/%s", PLUGINS_DIR, plugin_name); { /* retries with the absolute name */
plugin = dlopen (complete_plugin_name, RTLD_NOW); complete_plugin_name = (char *) malloc (MAX_LINE);
} sprintf (complete_plugin_name, "%s/%s", PLUGINS_DIR, plugin_name);
plugin = dlopen (complete_plugin_name, RTLD_LAZY);
}
if (!plugin) if (!plugin)
{ {
err_sys ("Cannot load \"%s\" (I tried the short name, then the complete name in \"%s\"): %s", err_sys
plugin_name, PLUGINS_DIR, dlerror ()); ("Cannot load \"%s\" (I tried the short name, then the complete name in \"%s\"): %s",
plugin_name, PLUGINS_DIR, dlerror ());
} }
plugin_init = dlsym (plugin, "init"); plugin_init = dlsym (plugin, "init");
dl_result = dlerror (); dl_result = dlerror ();
@ -1386,7 +1386,7 @@ main (argc, argv)
/* Clean */ /* Clean */
if (plugin) if (plugin)
plugin_terminate(); plugin_terminate ();
/* It would be nice to clean here for OpenSSL */ /* It would be nice to clean here for OpenSSL */
#ifdef GNUTLS #ifdef GNUTLS
if (ssl) if (ssl)

Loading…
Cancel
Save