summary refs log tree commit diff
path: root/pkgs/os-specific/linux/kmod/module-dir.patch
blob: 64262400860b8c9009abb4d2805f7a760860b87c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
diff -Naur kmod-7-orig/libkmod/libkmod.c kmod-7/libkmod/libkmod.c
--- kmod-7-orig/libkmod/libkmod.c	2012-03-15 08:19:16.750010226 -0400
+++ kmod-7/libkmod/libkmod.c	2012-04-04 16:28:37.442130553 -0400
@@ -200,7 +200,7 @@
 static char *get_kernel_release(const char *dirname)
 {
 	struct utsname u;
-	char *p;
+	char *p, *dirname_prefix;
 
 	if (dirname != NULL)
 		return path_make_absolute_cwd(dirname);
@@ -208,7 +208,10 @@
 	if (uname(&u) < 0)
 		return NULL;
 
-	if (asprintf(&p, "%s/%s", dirname_default_prefix, u.release) < 0)
+	if ((dirname_prefix = getenv("MODULE_DIR")) == NULL)
+		dirname_prefix = dirname_default_prefix;
+
+	if (asprintf(&p, "%s/%s", dirname_prefix, u.release) < 0)
 		return NULL;
 
 	return p;
diff -Naur kmod-7-orig/tools/kmod-depmod.c kmod-7/tools/kmod-depmod.c
--- kmod-7-orig/tools/kmod-depmod.c	2012-03-09 09:31:04.086042138 -0500
+++ kmod-7/tools/kmod-depmod.c	2012-04-04 16:34:53.525968272 -0400
@@ -2523,7 +2523,7 @@
 {
 	FILE *out = NULL;
 	int err = 0, all = 0, maybe_all = 0, n_config_paths = 0;
-	char *root = NULL;
+	char *root = NULL, *dirname;
 	const char **config_paths = NULL;
 	const char *system_map = NULL;
 	const char *module_symvers = NULL;
@@ -2632,8 +2632,16 @@
 		cfg.kversion = un.release;
 	}
 
+	if ((dirname = getenv("MODULE_DIR")) == NULL) {
+		dirname = "%s" ROOTPREFIX "/lib/modules/%s";
+	} else {
+		char *full_dirname = malloc(strlen(dirname) + sizeof "%%s%%s");
+		sprintf(full_dirname, "%%s%s%%s", dirname);
+		dirname = full_dirname;
+	}
+
 	cfg.dirnamelen = snprintf(cfg.dirname, PATH_MAX,
-				  "%s" ROOTPREFIX "/lib/modules/%s",
+				  dirname,
 				  root == NULL ? "" : root, cfg.kversion);
 
 	if (optind == argc)