]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib: expand HOME, support path-less library search
authorMarek Vavruša <marek.vavrusa@nic.cz>
Mon, 23 Feb 2015 23:36:21 +0000 (00:36 +0100)
committerMarek Vavruša <marek.vavrusa@nic.cz>
Mon, 23 Feb 2015 23:36:21 +0000 (00:36 +0100)
lib/module.c

index d87ac0c9efd69f6fcc9753224ff3c1bef11656f8..15b465e8d964fe1a47161f0a9692498c68d0dcff 100644 (file)
@@ -1,3 +1,4 @@
+#include <stdlib.h>
 #include <dlfcn.h>
 
 #include "lib/defines.h"
@@ -24,11 +25,13 @@ static void *load_symbol(void *lib, const char *prefix, const char *name)
 
 static int load_library(struct kr_module *module, const char *name, const char *path)
 {
-       if (path == NULL) {
-               return kr_error(EINVAL);
+       const char *ext = library_ext();
+       auto_free char *lib_path = NULL;
+       if (path != NULL) {
+               lib_path = kr_strcatdup(4, path, "/", name, ext);
+       } else {
+               lib_path = kr_strcatdup(2, name, ext);
        }
-
-       auto_free char *lib_path = kr_strcatdup(4, path, "/", name, library_ext());
        if (lib_path == NULL) {
                return kr_error(ENOMEM);
        }
@@ -43,8 +46,16 @@ static int load_library(struct kr_module *module, const char *name, const char *
 
 int kr_module_load(struct kr_module *module, const char *name, const char *path)
 {
+       if (module == NULL || name == NULL) {
+               return kr_error(EINVAL);
+       }
+
+       /* Search for module library. */
+       memset(module, 0, sizeof(struct kr_module));
        if (load_library(module, name, path) != 0) {
-               if (load_library(module, name, "~/.local/" MODULEDIR) != 0) {
+               /* Expand HOME env variable, as the linker may not expand it. */
+               auto_free char *local_path = kr_strcatdup(2, getenv("HOME"), "/.local" MODULEDIR);
+               if (load_library(module, name, local_path) != 0) {
                        if (load_library(module, name, PREFIX MODULEDIR) != 0) {        
                        }
                }