]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
switch_loadable_module: Add attribute "path" to autoload_configs/modules.conf.xml...
authorMarc Olivier Chouinard <mochouinard@moctel.com>
Fri, 10 Sep 2010 03:25:35 +0000 (23:25 -0400)
committerMarc Olivier Chouinard <mochouinard@moctel.com>
Fri, 10 Sep 2010 03:25:35 +0000 (23:25 -0400)
Useful for module made outside of fs source tree like mod_com_g729.  When you delete your lib bin mod folder after a clean install, you don't have to remember to recopy mod_com_g729 if located in mod_com folder.

src/switch_loadable_module.c

index 67325648b27f27fb4273fe68691496b8fc777fe0..bf636dd4c2c6ba190e0f5c3c4fac87a287aae53b 100644 (file)
@@ -1277,6 +1277,7 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
                        for (ld = switch_xml_child(mods, "load"); ld; ld = ld->next) {
                                switch_bool_t global = SWITCH_FALSE;
                                const char *val = switch_xml_attr_soft(ld, "module");
+                               const char *path = switch_xml_attr_soft(ld, "path");
                                const char *critical = switch_xml_attr_soft(ld, "critical");
                                const char *sglobal = switch_xml_attr_soft(ld, "global");
                                if (zstr(val) || (strchr(val, '.') && !strstr(val, ext) && !strstr(val, EXT))) {
@@ -1285,7 +1286,10 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
                                }
                                global = switch_true(sglobal);
                                
-                               if (switch_loadable_module_load_module_ex((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) val, SWITCH_FALSE, global, &err) == SWITCH_STATUS_FALSE) {
+                               if (path && zstr(path)) {
+                                       path = SWITCH_GLOBAL_dirs.mod_dir;
+                               }
+                               if (switch_loadable_module_load_module_ex((char *) path, (char *) val, SWITCH_FALSE, global, &err) == SWITCH_STATUS_FALSE) {
                                        if (critical && switch_true(critical)) {
                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Failed to load critical module '%s', abort()\n", val);
                                                abort();
@@ -1307,13 +1311,18 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
                        for (ld = switch_xml_child(mods, "load"); ld; ld = ld->next) {
                                switch_bool_t global = SWITCH_FALSE;
                                const char *val = switch_xml_attr_soft(ld, "module");
+                               const char *path = switch_xml_attr_soft(ld, "path");
                                const char *sglobal = switch_xml_attr_soft(ld, "global");
                                if (zstr(val) || (strchr(val, '.') && !strstr(val, ext) && !strstr(val, EXT))) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val);
                                        continue;
                                }
                                global = switch_true(sglobal);
-                               switch_loadable_module_load_module_ex((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) val, SWITCH_FALSE, global, &err);
+
+                               if (path && zstr(path)) {
+                                       path = SWITCH_GLOBAL_dirs.mod_dir;
+                               }
+                               switch_loadable_module_load_module_ex((char *) path, (char *) val, SWITCH_FALSE, global, &err);
                                count++;
                        }
                }