]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Fix bug in reporting errors from ltdl library.
authorHoward Chu <hyc@openldap.org>
Tue, 28 Sep 1999 09:54:00 +0000 (09:54 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 28 Sep 1999 09:54:00 +0000 (09:54 +0000)
servers/slapd/module.c

index 7dd253a8063d1d33c50a6ac2d5cde7895a561484..37884f254b88fc77ac7030087e9eb03bdff507fe 100644 (file)
@@ -7,18 +7,29 @@
 
 #include <ltdl.h>
 
-int module_load(const char* file_name, int argc, char *argv[]) {
+int module_load(const char* file_name, int argc, char *argv[])
+{
     lt_dlhandle* module = NULL;
+    const char *error;
+
+    /*
+     * The result of lt_dlerror(), when called, must be cached prior
+     * to calling Debug. This is because Debug is a macro that expands
+     * into multiple function calls.
+     */
+
     int (*initialize) LDAP_P((int argc, char *argv[]));
 
     if (lt_dlinit()) {
-       Debug(LDAP_DEBUG_ANY, "lt_dlinit failed: %s\n", lt_dlerror(), 0, 0);
+       error = lt_dlerror();
+       Debug(LDAP_DEBUG_ANY, "lt_dlinit failed: %s\n", error, 0, 0);
        return -1;
     }
 
     if ((module = lt_dlopen(file_name)) == NULL) {
+       error = lt_dlerror();
        Debug(LDAP_DEBUG_ANY, "lt_dlopen failed: (%s) %s\n", file_name,
-           lt_dlerror(), 0);
+           error, 0);
        return -1;
     }
 
@@ -32,10 +43,19 @@ int module_load(const char* file_name, int argc, char *argv[]) {
     return -1;
 }
 
-int module_path(const char *path) {
+int module_path(const char *path)
+{
+    const char *error;
+
+    /*
+     * The result of lt_dlerror(), when called, must be cached prior
+     * to calling Debug. This is because Debug is a macro that expands
+     * into multiple function calls.
+     */
 
     if (lt_dlinit()) {
-       Debug(LDAP_DEBUG_ANY, "lt_dlinit failed: %s\n", lt_dlerror(), 0, 0);
+       error = lt_dlerror();
+       Debug(LDAP_DEBUG_ANY, "lt_dlinit failed: %s\n", error, 0, 0);
        return -1;
     }