rev |
line source |
pascal@1299
|
1 --- busybox-1.12.0/modutils/depmod.c
|
pascal@1299
|
2 +++ busybox-1.12.0/modutils/depmod.c
|
pascal@1299
|
3 @@ -53,27 +53,14 @@ static int FAST_FUNC fileAction(const ch
|
pascal@1299
|
4 size_t len = sb->st_size;
|
pascal@1299
|
5 void *the_module;
|
pascal@1299
|
6 char *ptr;
|
pascal@1299
|
7 - int fd;
|
pascal@1299
|
8 char *depends, *deps;
|
pascal@1299
|
9 dep_lst_t *this;
|
pascal@1299
|
10 + extern void *xalloc_load_module(const char filename[], size_t *len);
|
pascal@1299
|
11
|
pascal@1299
|
12 if (strrstr(fname, ".ko") == NULL) /* not a module */
|
pascal@1299
|
13 goto skip;
|
pascal@1299
|
14
|
pascal@1299
|
15 -/*XXX: FIXME: does not handle compressed modules!
|
pascal@1299
|
16 - * There should be a function that looks at the extension and sets up
|
pascal@1299
|
17 - * open_transformer for us.
|
pascal@1299
|
18 - */
|
pascal@1299
|
19 - fd = xopen(fname, O_RDONLY);
|
pascal@1299
|
20 - the_module = mmap(NULL, len, PROT_READ, MAP_SHARED
|
pascal@1299
|
21 -#if defined MAP_POPULATE
|
pascal@1299
|
22 - |MAP_POPULATE
|
pascal@1299
|
23 -#endif
|
pascal@1299
|
24 - , fd, 0);
|
pascal@1299
|
25 - close(fd);
|
pascal@1299
|
26 - if (the_module == MAP_FAILED)
|
pascal@1299
|
27 - bb_perror_msg_and_die("mmap");
|
pascal@1299
|
28 -
|
pascal@1299
|
29 + the_module = xalloc_load_module(fname, &len);
|
pascal@1299
|
30 this = xzalloc(sizeof(dep_lst_t));
|
pascal@1299
|
31 this->name = xstrdup(fname);
|
pascal@1299
|
32 this->next = G.lst;
|
pascal@1299
|
33 @@ -104,7 +91,7 @@ static int FAST_FUNC fileAction(const ch
|
pascal@1299
|
34 pos = (ptr - (char*)the_module);
|
pascal@1299
|
35 } while (1);
|
pascal@1299
|
36 }
|
pascal@1299
|
37 - munmap(the_module, sb->st_size);
|
pascal@1299
|
38 + free(the_module);
|
pascal@1299
|
39 skip:
|
pascal@1299
|
40 return TRUE;
|
pascal@1299
|
41 }
|
pascal@1299
|
42
|
pascal@1299
|
43 --- busybox-1.12.0/modutils/insmod.c
|
pascal@1299
|
44 +++ busybox-1.12.0/modutils/insmod.c
|
pascal@1299
|
45 @@ -59,6 +59,7 @@
|
pascal@1299
|
46 */
|
pascal@1299
|
47
|
pascal@1299
|
48 #include "libbb.h"
|
pascal@1299
|
49 +#include "unarchive.h"
|
pascal@1299
|
50 #include <libgen.h>
|
pascal@1299
|
51 #include <sys/utsname.h>
|
pascal@1299
|
52
|
pascal@5066
|
53 @@ -4212,6 +4213,60 @@ static const char *moderror(int err)
|
pascal@1299
|
54 }
|
pascal@1299
|
55 }
|
pascal@1299
|
56
|
pascal@1299
|
57 +void *xalloc_load_module(const char filename[], size_t *len);
|
pascal@1299
|
58 +void *xalloc_load_module(const char filename[], size_t *len)
|
pascal@1299
|
59 +{
|
pascal@1299
|
60 + int fd, max;
|
pascal@1299
|
61 + unsigned char head[16];
|
pascal@1299
|
62 + void *map;
|
pascal@1299
|
63 + size_t l;
|
pascal@1299
|
64 +
|
pascal@1299
|
65 + max = 8 * 1024;
|
pascal@1299
|
66 + fd = open(filename, O_RDONLY);
|
pascal@1299
|
67 + if (fd < 0) return NULL;
|
pascal@1299
|
68 + xread(fd,head,sizeof(head));
|
pascal@1299
|
69 + lseek(fd,0L,SEEK_SET);
|
pascal@5066
|
70 +#if ENABLE_FEATURE_SEAMLESS_GZ
|
pascal@1299
|
71 + if (head[0] == 0x1f && head[1] == 0x8b) { /* gzip */
|
pascal@1397
|
72 +#if BB_MMU
|
pascal@1397
|
73 + xread(fd,head,2); // bb wierdness...
|
pascal@1397
|
74 +#endif
|
pascal@1299
|
75 + open_transformer(fd, unpack_gz_stream, "gunzip");
|
pascal@1299
|
76 + }
|
pascal@5066
|
77 +#endif
|
pascal@5066
|
78 +#if ENABLE_FEATURE_SEAMLESS_BZ2
|
pascal@5066
|
79 +#if ENABLE_FEATURE_SEAMLESS_GZ
|
pascal@5066
|
80 + else
|
pascal@5066
|
81 +#endif
|
pascal@5066
|
82 + if (head[0] == 'B' && head[1] == 'Z' &&
|
pascal@1299
|
83 + head[2] == 'h' && isdigit(head[3])) { /* bzip2 */
|
pascal@1299
|
84 + open_transformer(fd, unpack_bz2_stream, "bunzip2");
|
pascal@1299
|
85 + }
|
pascal@5066
|
86 +#endif
|
pascal@5066
|
87 +#if ENABLE_FEATURE_SEAMLESS_LZMA
|
pascal@5066
|
88 +#if ENABLE_FEATURE_SEAMLESS_GZ || ENABLE_FEATURE_SEAMLESS_BZ2
|
pascal@5066
|
89 + else
|
pascal@5066
|
90 +#endif
|
pascal@5066
|
91 + if (head[1] != 'E' || head[2] != 'L' || head[3] != 'F') {
|
pascal@1299
|
92 + open_transformer(fd, unpack_lzma_stream, "unlzma");
|
pascal@1299
|
93 + if (* (unsigned *) (head + 9) == 0)
|
pascal@1299
|
94 + max = 1 + head[5] + (head[6]<<8)
|
pascal@1299
|
95 + + (head[7]<<16) + (head[8]<<24);
|
pascal@1299
|
96 + }
|
pascal@5066
|
97 +#endif
|
pascal@1299
|
98 + l = 0;
|
pascal@1299
|
99 + map = xmalloc(max);
|
pascal@1299
|
100 + while (1) {
|
pascal@1299
|
101 + l += full_read(fd, l + (char *) map, max - l);
|
pascal@1299
|
102 + if (l != max) break;
|
pascal@1299
|
103 + max <<= 1;
|
pascal@1299
|
104 + map = xrealloc(map, max);
|
pascal@1299
|
105 + }
|
pascal@1299
|
106 + if (len)
|
pascal@1299
|
107 + *len = l;
|
pascal@1299
|
108 + return xrealloc(map, l);
|
pascal@1299
|
109 +}
|
pascal@1299
|
110 +
|
pascal@1299
|
111 #if !ENABLE_FEATURE_2_4_MODULES
|
pascal@1299
|
112 int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
pascal@1299
|
113 int insmod_main(int argc UNUSED_PARAM, char **argv)
|
pascal@5066
|
114 @@ -4276,8 +4319,7 @@ static int insmod_ng_main(int argc UNUSE
|
pascal@1299
|
115 xread(fd, map, len);
|
pascal@1299
|
116 }
|
pascal@1299
|
117 #else
|
pascal@1299
|
118 - len = MAXINT(ssize_t);
|
pascal@1299
|
119 - map = xmalloc_open_read_close(filename, &len);
|
pascal@1299
|
120 + map = xalloc_load_module(filename, &len);
|
pascal@1299
|
121 #endif
|
pascal@1299
|
122
|
pascal@1299
|
123 if (init_module(map, len, options) != 0)
|
pascal@1299
|
124
|
pascal@1299
|
125 --- busybox-1.12.0/modutils/modprobe.c
|
pascal@1299
|
126 +++ busybox-1.12.0/modutils/modprobe.c
|
pascal@1299
|
127 @@ -396,6 +396,29 @@ static int include_conf_file2(struct inc
|
pascal@1299
|
128 return include_conf_file(conf, oldname);
|
pascal@1299
|
129 }
|
pascal@1299
|
130
|
pascal@1299
|
131 +static int ext_size(char *end USE_FEATURE_2_6_MODULES(, int k_version))
|
pascal@1299
|
132 +{
|
pascal@1299
|
133 + int ext;
|
pascal@1299
|
134 + char *next;
|
pascal@1299
|
135 +
|
pascal@1299
|
136 + ext = 0;
|
pascal@1299
|
137 + if (end[-2] == '.' && end[-1] == 'g' && end[0] == 'z')
|
pascal@1299
|
138 + ext = 3;
|
pascal@1299
|
139 + if (end[-3] == '.' && end[-2] == 'b' && end[-1] == 'z' && end[0] == '2')
|
pascal@1299
|
140 + ext = 4;
|
pascal@1299
|
141 + next = end - ext;
|
pascal@1299
|
142 +#if ENABLE_FEATURE_2_6_MODULES
|
pascal@1299
|
143 + if (ENABLE_FEATURE_2_6_MODULES
|
pascal@1299
|
144 + && (k_version > 4) && (next[-2] == '.')
|
pascal@1299
|
145 + && (next[-1] == 'k') && (next[0] == 'o'))
|
pascal@1299
|
146 + ext += 3;
|
pascal@1299
|
147 + else
|
pascal@1299
|
148 +#endif
|
pascal@1299
|
149 + if ((next[-1] == '.') && (next[0] == 'o'))
|
pascal@1299
|
150 + ext += 2;
|
pascal@1299
|
151 + return ext;
|
pascal@1299
|
152 +}
|
pascal@1299
|
153 +
|
pascal@1299
|
154 /*
|
pascal@1299
|
155 * This function builds a list of dependency rules from /lib/modules/`uname -r`/modules.dep.
|
pascal@1299
|
156 * It then fills every modules and aliases with their default options, found by parsing
|
pascal@1299
|
157 @@ -464,12 +487,7 @@ static struct dep_t *build_dep(void)
|
pascal@1299
|
158 if (!modpath)
|
pascal@1299
|
159 modpath = line_buffer; /* module with no path */
|
pascal@1299
|
160 /* find the end of the module name in the file name */
|
pascal@1299
|
161 - if (ENABLE_FEATURE_2_6_MODULES &&
|
pascal@1299
|
162 - (k_version > 4) && (col[-3] == '.') &&
|
pascal@1299
|
163 - (col[-2] == 'k') && (col[-1] == 'o'))
|
pascal@1299
|
164 - dot = col - 3;
|
pascal@1299
|
165 - else if ((col[-2] == '.') && (col[-1] == 'o'))
|
pascal@1299
|
166 - dot = col - 2;
|
pascal@1299
|
167 + dot = col - ext_size(col - 1 USE_FEATURE_2_6_MODULES(, k_version));
|
pascal@1299
|
168
|
pascal@1299
|
169 mod = xstrndup(mods, dot - mods);
|
pascal@1299
|
170
|
pascal@1299
|
171 @@ -522,12 +540,7 @@ static struct dep_t *build_dep(void)
|
pascal@1299
|
172 deps = skip_whitespace(deps);
|
pascal@1299
|
173
|
pascal@1299
|
174 /* find the end of the module name in the file name */
|
pascal@1299
|
175 - if (ENABLE_FEATURE_2_6_MODULES
|
pascal@1299
|
176 - && (k_version > 4) && (next[-2] == '.')
|
pascal@1299
|
177 - && (next[-1] == 'k') && (next[0] == 'o'))
|
pascal@1299
|
178 - ext = 3;
|
pascal@1299
|
179 - else if ((next[-1] == '.') && (next[0] == 'o'))
|
pascal@1299
|
180 - ext = 2;
|
pascal@1299
|
181 + ext = ext_size(next USE_FEATURE_2_6_MODULES(, k_version));
|
pascal@1299
|
182
|
pascal@1299
|
183 /* Cope with blank lines */
|
pascal@1299
|
184 if ((next - deps - ext + 1) <= 0)
|
pascal@1478
|
185
|
pascal@1478
|
186 --- busybox-1.12.0/modutils/depmod.c
|
pascal@1478
|
187 +++ busybox-1.12.0/modutils/depmod.c
|
pascal@1478
|
188 @@ -109,11 +109,15 @@
|
pascal@1478
|
189 ARG_b = (1<<2), /* not /lib/modules/$(uname -r)/ but this base-dir */
|
pascal@1478
|
190 ARG_e = (1<<3), /* with -F, print unresolved symbols */
|
pascal@1478
|
191 ARG_F = (1<<4), /* System.map that contains the symbols */
|
pascal@1478
|
192 - ARG_n = (1<<5) /* dry-run, print to stdout only */
|
pascal@1478
|
193 + ARG_n = (1<<5), /* dry-run, print to stdout only */
|
pascal@1478
|
194 + ARG_u = (1<<6), /* unresolved-error: ignored */
|
pascal@1478
|
195 + ARG_q = (1<<7), /* quiet: ignored */
|
pascal@1478
|
196 + ARG_r = (1<<8), /* root: ignored */
|
pascal@1478
|
197 + ARG_C = (1<<9) /* config: ignored */
|
pascal@1478
|
198 };
|
pascal@1478
|
199 INIT_G();
|
pascal@1478
|
200
|
pascal@1478
|
201 - getopt32(argv, "aAb:eF:n", &moddir_base, &system_map);
|
pascal@1478
|
202 + getopt32(argv, "aAb:eF:nuqrC", &moddir_base, &system_map);
|
pascal@1478
|
203 argv += optind;
|
pascal@1478
|
204
|
pascal@1478
|
205 /* If a version is provided, then that kernel version’s module directory
|
pascal@1636
|
206
|
pascal@1636
|
207 --- busybox-1.12.0/modutils/depmod.c
|
pascal@1636
|
208 +++ busybox-1.12.0/modutils/depmod.c
|
pascal@1636
|
209 @@ -141,6 +141,11 @@
|
pascal@1636
|
210
|
pascal@1636
|
211 if (!(option_mask32 & ARG_n)) { /* --dry-run */
|
pascal@1636
|
212 chp = concat_path_file(moddir, CONFIG_DEFAULT_DEPMOD_FILE);
|
pascal@1636
|
213 + if (option_mask32 & ARG_b) {
|
pascal@1636
|
214 + char *s = concat_path_file(moddir_base, chp);
|
pascal@1636
|
215 + free(chp);
|
pascal@1636
|
216 + chp = s;
|
pascal@1636
|
217 + }
|
pascal@1636
|
218 filedes = xfopen_for_write(chp);
|
pascal@1636
|
219 if (ENABLE_FEATURE_CLEAN_UP)
|
pascal@1636
|
220 free(chp);
|