[sr-dev] git:master:6c7d38ee: core: name of structure exported by a module can be prefixed with module name

Daniel-Constantin Mierla miconda at gmail.com
Mon Sep 21 09:01:22 CEST 2015


Module: kamailio
Branch: master
Commit: 6c7d38ee0fcbd482ff0527178481345fc93a7fc8
URL: https://github.com/kamailio/kamailio/commit/6c7d38ee0fcbd482ff0527178481345fc93a7fc8

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2015-09-21T09:01:08+02:00

core: name of structure exported by a module can be prefixed with module name

- some modules use the flag for global exporting, which can lead to
  naming conflicts
- related to GH#333

---

Modified: sr_module.c

---

Diff:  https://github.com/kamailio/kamailio/commit/6c7d38ee0fcbd482ff0527178481345fc93a7fc8.diff
Patch: https://github.com/kamailio/kamailio/commit/6c7d38ee0fcbd482ff0527178481345fc93a7fc8.patch

---

diff --git a/sr_module.c b/sr_module.c
index 216c953..057bf02 100644
--- a/sr_module.c
+++ b/sr_module.c
@@ -459,6 +459,8 @@ int load_module(char* mod_path)
 	int new_dlflags;
 	int retries;
 	int path_type;
+	str expref;
+	char exbuf[64];
 
 #ifndef RTLD_NOW
 /* for openbsd */
@@ -611,9 +613,24 @@ int load_module(char* mod_path)
 		}
 	}
 	exp = (union module_exports_u*)dlsym(handle, DLSYM_PREFIX "exports");
-	if ( (error =(char*)dlerror())!=0 ){
-		LM_ERR("%s\n", error);
-		goto error1;
+	if(exp==NULL) {
+		/* 'exports' structure not found, look up for '_modulename_exports' */
+		mdir = strrchr(mod_path, '/');
+		if (!mdir) {
+			expref.s = mod_path;
+		} else {
+			expref.s = mdir+1;
+		}
+		expref.len = strlen(expref.s);
+		if(expref.len>3 && strcmp(expref.s+expref.len-3, ".so")==0)
+			expref.len -= 3;
+		snprintf(exbuf, 62, DLSYM_PREFIX "_%.*s_exports", expref.len, expref.s);
+		exp = (union module_exports_u*)dlsym(handle, exbuf);
+		LM_DBG("looking up exports with name: %s\n", exbuf);
+		if ( (error =(char*)dlerror())!=0 ){
+			LM_ERR("%s\n", error);
+			goto error1;
+		}
 	}
 	/* hack to allow for kamailio style dlflags inside exports */
 	if (*mod_if_ver == 1) {




More information about the sr-dev mailing list