Configurable dynamic library path
authorHenning Rogge <hrogge@googlemail.com>
Sat, 7 Mar 2009 20:14:20 +0000 (21:14 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Sat, 7 Mar 2009 20:14:20 +0000 (21:14 +0100)
src/olsr_cfg.c
src/olsr_cfg.h
src/plugin_loader.c

index c4a8420..4ac23e4 100644 (file)
@@ -1039,6 +1039,10 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
       PARSER_DEBUG_PRINTF("OLSR port: %d\n", rcfg->olsr_port);
     }
     break;
+  case '2':
+    rcfg->dlPath = strdup(argstr);
+    PARSER_DEBUG_PRINTF("Dynamic library path: %s\n", rcfg->dlPath);
+    break;
   default:
     sprintf(rmsg, "Unknown arg in line %d.\n", line);
     return CFG_ERROR;
@@ -1139,6 +1143,7 @@ olsr_parse_cfg(int argc, char *argv[], const char *file, char *rmsg, struct olsr
     {"RouterId",                 required_argument, 0, 'o'}, /* (ip) */
     {"SourceIpMode",             required_argument, 0, 's'}, /* (yes/no) */
     {"Port",                     required_argument, 0, '1'}, /* (i) */
+    {"dlPath",                   required_argument, 0, '2'}, /* (path) */
 
     {"UseHysteresis",            required_argument, 0,  0 }, /* ignored */
     {"HystScaling",              required_argument, 0,  0 }, /* ignored */
@@ -1423,6 +1428,11 @@ olsr_free_cfg(struct olsr_config *cfg)
     free(cfg->log_target_file);
   }
 
+  /* free dynamic library path */
+  if (cfg->dlPath) {
+    free(cfg->dlPath);
+  }
+
   /*
    * Free HNAs.
    */
@@ -1541,6 +1551,7 @@ olsr_get_default_cfg(void)
   assert(cfg->willingness == 0);
 
   cfg->olsr_port = 698;
+  assert(cfg->dlPath == NULL);
 
   assert(cfg->system_tick_divider == 0);
   assert(0 == memcmp(&all_zero, &cfg->router_id, sizeof(cfg->router_id)));
index a79f25a..2a459e5 100644 (file)
@@ -214,6 +214,8 @@ struct olsr_config {
   uint8_t willingness;                 /* Manual Configured Willingness value */
 
   uint16_t olsr_port;                  /* port number used for OLSR packages */
+  char *dlPath;                        /* absolute path for dynamic libraries */
+
   /*
    * Someone has added global variables to the config struct.
    * Because this saves binary link info we keep it that way.
index 565ebd3..df68f80 100644 (file)
@@ -93,7 +93,16 @@ static int olsr_load_dl(char *libname, struct plugin_param *params)
 
     OLSR_PRINTF(0, "---------- LOADING LIBRARY %s ----------\n", libname);
 
-    plugin->dlhandle = dlopen(libname, RTLD_NOW);
+    if (olsr_cnf->dlPath) {
+      char *path = olsr_malloc(strlen(olsr_cnf->dlPath) + strlen(libname)+1, "Memory for absolute library path");
+      strcpy(path, olsr_cnf->dlPath);
+      strcat(path, libname);
+      plugin->dlhandle = dlopen(libname, RTLD_NOW);
+      free(path);
+    }
+    else {
+      plugin->dlhandle = dlopen(libname, RTLD_NOW);
+    }
     if(plugin->dlhandle == NULL) {
         const int save_errno = errno;
         OLSR_PRINTF(0, "DL loading failed: \"%s\"!\n", dlerror());