about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-11-24 10:44:00 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-11-24 10:44:00 +0000
commit4f0b97400236e650af4e80f336f99059f47f5c01 (patch)
treee88c0a3a43dbc79a34441bab00b43648591cc820
parent832443b4b18c4a172d3a8f686c655ecc9e3c5085 (diff)
downloadzsh-4f0b97400236e650af4e80f336f99059f47f5c01.tar.gz
zsh-4f0b97400236e650af4e80f336f99059f47f5c01.tar.xz
zsh-4f0b97400236e650af4e80f336f99059f47f5c01.zip
zsh-workers/8766
-rw-r--r--Src/module.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/Src/module.c b/Src/module.c
index 9be11f195..f5beffbc5 100644
--- a/Src/module.c
+++ b/Src/module.c
@@ -550,13 +550,16 @@ finish_module(Module m)
 #endif /* !AIXDYNAMIC */
 
 /**/
-Module
+int
 load_module(char const *name)
 {
     Module m;
     void *handle;
     LinkNode node, n;
 
+    if (module_linked(name))
+	return 1;
+
     if (!(node = find_module(name))) {
 	if (!(handle = do_load_module(name)))
 	    return NULL;
@@ -576,36 +579,36 @@ load_module(char const *name)
 	    return NULL;
 	}
 	m->flags &= ~MOD_SETUP;
-	return m;
+	return 1;
     } 
     m = (Module) getdata(node);
     if (m->flags & MOD_SETUP)
-	return m;
+	return 1;
     if (m->flags & MOD_UNLOAD)
 	m->flags &= ~MOD_UNLOAD;
     else if (m->handle)
-	return m;
+	return 1;
     if (m->flags & MOD_BUSY) {
 	zerr("circular dependencies for module %s", name, 0);
-	return NULL;
+	return 0;
     }
     m->flags |= MOD_BUSY;
     if (m->deps)
 	for (n = firstnode(m->deps); n; incnode(n))
 	    if (!load_module((char *) getdata(n))) {
 		m->flags &= ~MOD_BUSY;
-		return NULL;
+		return 0;
 	    }
     m->flags &= ~MOD_BUSY;
     if (!m->handle) {
 	if (!(m->handle = do_load_module(name)))
-	    return NULL;
+	    return 0;
 	m->flags |= MOD_SETUP;
 	if (setup_module(m)) {
 	    finish_module(m->handle);
 	    m->handle = NULL;
 	    m->flags &= ~MOD_SETUP;
-	    return NULL;
+	    return 0;
 	}
     }
     m->flags |= MOD_SETUP;
@@ -613,10 +616,10 @@ load_module(char const *name)
 	finish_module(m->handle);
 	m->handle = NULL;
 	m->flags &= ~MOD_SETUP;
-	return NULL;
+	return 0;
     }
     m->flags &= ~MOD_SETUP;
-    return m;
+    return 1;
 }
 
 /* This ensures that the module with the name given as the second argument
@@ -650,7 +653,7 @@ require_module(char *nam, char *module, int res, int test)
 	zwarnnam(nam, "%s: restricted", module, 0);
 	return 0;
     } else
-	return !!load_module(module);
+	return load_module(module);
 
     return 1;
 }