On Sat, 2004-09-11 at 06:18, Sam Lawrance wrote: > Howdy folks, > It seems that you are correct.
> The following code snippet is part of plugin loading (from the 0.82 > tarball, src/syncengine.c around line 1720). > > plugin = g_malloc0(sizeof(sync_plugin)); > g_assert(plugin); > plugin->plugin = mod; > plugin->shortname = CALL_PLUGIN(plugin, "short_name", ()); > ptr=dlerror(); > if (ptr != 0) { > printf("ERROR: Failed to load plugin: %s! (Error=%s, > missing short > _name-symbol)\n", name, ptr); > dlclose(mod); > continue; > } > But using dlerror to detect an error is also correct. From the dlsym manpage: char *error; dlerror(); /* Clear any existing error */ *(void **) (&cosine) = dlsym(handle, "cos"); if ((error = dlerror()) != NULL) { fprintf (stderr, "%s\n", error); exit(1); } > CALL_PLUGIN is a macro using dlsym(). > > From what I understand it is incorrect to test for an error using > dlerror(). This is because the error reported by dlerror() is not > cleared across successful calls to dlsym(), dlopen() etc. > > In my case, libX11.so.6 was attempting to load nss_dns.so.1, which > failed noncritically - and the error was being caught by dlerror() in > multisync! So multisync thought the plugin failed to load, even though > the failure had nothing to do with multisync. > > The code should probably be changed to check the return value of dlsym() > and interrogate dlerror() if and only if dlsym() has returned null. > > However, if you want a quick fix, put a call to dlerror() before > CALL_PLUGIN. This will reset the error condition, guaranteeing that any > errors reported after CALL_PLUGIN actually belong to this operation. > > Regards > Sam. > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170 > Project Admins to receive an Apple iPod Mini FREE for your judgement on > who ports your project to Linux PPC the best. Sponsored by IBM. > Deadline: Sept. 13. Go here: http://sf.net/ppc_contest.php > _______________________________________________ > Multisync-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/multisync-devel ------------------------------------------------------- This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170 Project Admins to receive an Apple iPod Mini FREE for your judgement on who ports your project to Linux PPC the best. Sponsored by IBM. Deadline: Sept. 13. Go here: http://sf.net/ppc_contest.php _______________________________________________ Multisync-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/multisync-devel