mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
update to busybox-1.14.1
This commit is contained in:
parent
f009ca8314
commit
152c971d86
@ -1,13 +0,0 @@
|
|||||||
--- busybox-1.14.0/util-linux/acpid.c Tue Apr 14 01:43:11 2009
|
|
||||||
+++ busybox-1.14.0-acpid/util-linux/acpid.c Sat Apr 18 13:33:19 2009
|
|
||||||
@@ -78,8 +78,8 @@
|
|
||||||
// goto configuration directory
|
|
||||||
xchdir(opt_conf);
|
|
||||||
|
|
||||||
-// // setup signals
|
|
||||||
-// bb_signals(BB_FATAL_SIGS, record_signo);
|
|
||||||
+ // prevent zombies
|
|
||||||
+ signal(SIGCHLD, SIG_IGN);
|
|
||||||
|
|
||||||
// no explicit evdev files given? -> use proc event interface
|
|
||||||
if (!*argv) {
|
|
@ -1,21 +0,0 @@
|
|||||||
--- busybox-1.14.0/editors/awk.c Tue Apr 14 01:43:09 2009
|
|
||||||
+++ busybox-1.14.0-awk/editors/awk.c Mon May 18 23:49:29 2009
|
|
||||||
@@ -1571,13 +1571,14 @@
|
|
||||||
n++; /* we saw yet another delimiter */
|
|
||||||
} else {
|
|
||||||
pmatch[0].rm_eo = l;
|
|
||||||
- if (s[l]) pmatch[0].rm_eo++;
|
|
||||||
+ if (s[l])
|
|
||||||
+ pmatch[0].rm_eo++;
|
|
||||||
}
|
|
||||||
memcpy(s1, s, l);
|
|
||||||
/* make sure we remove *all* of the separator chars */
|
|
||||||
- while (l < pmatch[0].rm_eo) {
|
|
||||||
- s1[l++] = '\0';
|
|
||||||
- }
|
|
||||||
+ do {
|
|
||||||
+ s1[l] = '\0';
|
|
||||||
+ } while (++l < pmatch[0].rm_eo);
|
|
||||||
nextword(&s1);
|
|
||||||
s += pmatch[0].rm_eo;
|
|
||||||
} while (*s);
|
|
@ -1,11 +0,0 @@
|
|||||||
--- busybox-1.14.0/scripts/defconfig Tue Apr 14 01:42:52 2009
|
|
||||||
+++ busybox-1.14.0-defconfig/scripts/defconfig Fri Apr 17 01:08:24 2009
|
|
||||||
@@ -579,7 +579,7 @@
|
|
||||||
CONFIG_EJECT=y
|
|
||||||
CONFIG_FEATURE_EJECT_SCSI=y
|
|
||||||
CONFIG_FBSPLASH=y
|
|
||||||
-CONFIG_FLASH_ERASEALL=y
|
|
||||||
+# CONFIG_FLASH_ERASEALL is not set
|
|
||||||
CONFIG_IONICE=y
|
|
||||||
# CONFIG_INOTIFYD is not set
|
|
||||||
CONFIG_LAST=y
|
|
@ -1,90 +0,0 @@
|
|||||||
--- busybox-1.14.0/modutils/depmod.c Tue Apr 14 01:42:55 2009
|
|
||||||
+++ busybox-1.14.0-depmod/modutils/depmod.c Mon May 18 22:37:14 2009
|
|
||||||
@@ -40,26 +40,28 @@
|
|
||||||
ARG_r = (1<<6) /* Compat dummy. Linux Makefile uses it */
|
|
||||||
};
|
|
||||||
|
|
||||||
-static int FAST_FUNC parse_module(const char *fname, struct stat *sb,
|
|
||||||
- void *data, int UNUSED_PARAM depth)
|
|
||||||
+static int FAST_FUNC parse_module(const char *fname, struct stat *sb UNUSED_PARAM,
|
|
||||||
+ void *data, int depth UNUSED_PARAM)
|
|
||||||
{
|
|
||||||
+ char modname[MODULE_NAME_LEN];
|
|
||||||
module_info **first = (module_info **) data;
|
|
||||||
char *image, *ptr;
|
|
||||||
module_info *info;
|
|
||||||
- size_t len = sb->st_size;
|
|
||||||
+ /* Arbitrary. Was sb->st_size, but that breaks .gz etc */
|
|
||||||
+ size_t len = (64*1024*1024 - 4096);
|
|
||||||
|
|
||||||
if (strrstr(fname, ".ko") == NULL)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
image = xmalloc_open_zipped_read_close(fname, &len);
|
|
||||||
- info = xzalloc(sizeof(module_info));
|
|
||||||
+ info = xzalloc(sizeof(*info));
|
|
||||||
|
|
||||||
info->next = *first;
|
|
||||||
*first = info;
|
|
||||||
|
|
||||||
info->dnext = info->dprev = info;
|
|
||||||
info->name = xasprintf("/%s", fname);
|
|
||||||
- info->modname = filename2modname(fname, NULL);
|
|
||||||
+ info->modname = xstrdup(filename2modname(fname, modname));
|
|
||||||
for (ptr = image; ptr < image + len - 10; ptr++) {
|
|
||||||
if (strncmp(ptr, "depends=", 8) == 0) {
|
|
||||||
char *u;
|
|
||||||
@@ -69,12 +71,14 @@
|
|
||||||
if (*u == '-')
|
|
||||||
*u = '_';
|
|
||||||
ptr += string_to_llist(ptr, &info->dependencies, ",");
|
|
||||||
- } else if (ENABLE_FEATURE_MODUTILS_ALIAS &&
|
|
||||||
- strncmp(ptr, "alias=", 6) == 0) {
|
|
||||||
+ } else if (ENABLE_FEATURE_MODUTILS_ALIAS
|
|
||||||
+ && strncmp(ptr, "alias=", 6) == 0
|
|
||||||
+ ) {
|
|
||||||
llist_add_to(&info->aliases, xstrdup(ptr + 6));
|
|
||||||
ptr += strlen(ptr);
|
|
||||||
- } else if (ENABLE_FEATURE_MODUTILS_SYMBOLS &&
|
|
||||||
- strncmp(ptr, "__ksymtab_", 10) == 0) {
|
|
||||||
+ } else if (ENABLE_FEATURE_MODUTILS_SYMBOLS
|
|
||||||
+ && strncmp(ptr, "__ksymtab_", 10) == 0
|
|
||||||
+ ) {
|
|
||||||
ptr += 10;
|
|
||||||
if (strncmp(ptr, "gpl", 3) == 0 ||
|
|
||||||
strcmp(ptr, "strings") == 0)
|
|
||||||
@@ -199,10 +203,17 @@
|
|
||||||
if (!(option_mask32 & ARG_n))
|
|
||||||
xfreopen_write("modules.alias", stdout);
|
|
||||||
for (m = modules; m != NULL; m = m->next) {
|
|
||||||
+ const char *fname = bb_basename(m->name);
|
|
||||||
+ int fnlen = strchrnul(fname, '.') - fname;
|
|
||||||
while (m->aliases) {
|
|
||||||
- printf("alias %s %s\n",
|
|
||||||
+ /* Last word can well be m->modname instead,
|
|
||||||
+ * but depmod from module-init-tools 3.4
|
|
||||||
+ * uses module basename, i.e., no s/-/_/g.
|
|
||||||
+ * (pathname and .ko.* are still stripped)
|
|
||||||
+ * Mimicking that... */
|
|
||||||
+ printf("alias %s %.*s\n",
|
|
||||||
(char*)llist_pop(&m->aliases),
|
|
||||||
- m->modname);
|
|
||||||
+ fnlen, fname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -210,10 +221,12 @@
|
|
||||||
if (!(option_mask32 & ARG_n))
|
|
||||||
xfreopen_write("modules.symbols", stdout);
|
|
||||||
for (m = modules; m != NULL; m = m->next) {
|
|
||||||
+ const char *fname = bb_basename(m->name);
|
|
||||||
+ int fnlen = strchrnul(fname, '.') - fname;
|
|
||||||
while (m->symbols) {
|
|
||||||
- printf("alias symbol:%s %s\n",
|
|
||||||
+ printf("alias symbol:%s %.*s\n",
|
|
||||||
(char*)llist_pop(&m->symbols),
|
|
||||||
- m->modname);
|
|
||||||
+ fnlen, fname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,14 +0,0 @@
|
|||||||
--- busybox-1.14.0/libbb/pw_encrypt_des.c Tue Apr 14 01:43:00 2009
|
|
||||||
+++ busybox-1.14.0-des/libbb/pw_encrypt_des.c Fri May 1 03:40:16 2009
|
|
||||||
@@ -778,8 +778,10 @@
|
|
||||||
to64_msb_first(output + 2, (r0 >> 8));
|
|
||||||
/* bits 7..0 of r0 and 31..16 of r1 */
|
|
||||||
to64_msb_first(output + 6, (r0 << 16) | (r1 >> 16));
|
|
||||||
- /* (bits 15..0 of r1 + 00) and NUL byte */
|
|
||||||
+ /* bits 15..0 of r1 and two zero bits (plus extra zero byte) */
|
|
||||||
to64_msb_first(output + 10, (r1 << 8));
|
|
||||||
+ /* extra zero byte is encoded as '.', fixing it */
|
|
||||||
+ output[13] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return output;
|
|
@ -1,12 +0,0 @@
|
|||||||
--- busybox-1.14.0/networking/udhcp/leases.c Tue Apr 14 01:42:51 2009
|
|
||||||
+++ busybox-1.14.0-dhcp_hostname/networking/udhcp/leases.c Tue Apr 21 02:41:22 2009
|
|
||||||
@@ -63,7 +63,8 @@
|
|
||||||
if (oldest) {
|
|
||||||
oldest->hostname[0] = '\0';
|
|
||||||
if (hostname) {
|
|
||||||
- hostname_length = hostname[-1]; /* look at option size byte */
|
|
||||||
+ /* option size byte, + 1 for NUL */
|
|
||||||
+ hostname_length = hostname[-1] + 1;
|
|
||||||
if (hostname_length > sizeof(oldest->hostname))
|
|
||||||
hostname_length = sizeof(oldest->hostname);
|
|
||||||
hostname = (uint8_t*) safe_strncpy((char*)oldest->hostname, (char*)hostname, hostname_length);
|
|
@ -1,91 +0,0 @@
|
|||||||
--- busybox-1.14.0/archival/gzip.c Tue Apr 14 01:42:55 2009
|
|
||||||
+++ busybox-1.14.0-gzip/archival/gzip.c Mon May 18 22:36:12 2009
|
|
||||||
@@ -389,19 +389,6 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
- * Clear input and output buffers
|
|
||||||
- */
|
|
||||||
-static void clear_bufs(void)
|
|
||||||
-{
|
|
||||||
- G1.outcnt = 0;
|
|
||||||
-#ifdef DEBUG
|
|
||||||
- G1.insize = 0;
|
|
||||||
-#endif
|
|
||||||
- G1.isize = 0;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-/* ===========================================================================
|
|
||||||
* Run a set of bytes through the crc shift register. If s is a NULL
|
|
||||||
* pointer, then initialize the crc shift register contents instead.
|
|
||||||
* Return the current crc in either case.
|
|
||||||
@@ -2019,7 +2006,37 @@
|
|
||||||
{
|
|
||||||
struct stat s;
|
|
||||||
|
|
||||||
- clear_bufs();
|
|
||||||
+ /* Clear input and output buffers */
|
|
||||||
+ G1.outcnt = 0;
|
|
||||||
+#ifdef DEBUG
|
|
||||||
+ G1.insize = 0;
|
|
||||||
+#endif
|
|
||||||
+ G1.isize = 0;
|
|
||||||
+
|
|
||||||
+ /* Reinit G2.xxx */
|
|
||||||
+ memset(&G2, 0, sizeof(G2));
|
|
||||||
+ G2.l_desc.dyn_tree = G2.dyn_ltree;
|
|
||||||
+ G2.l_desc.static_tree = G2.static_ltree;
|
|
||||||
+ G2.l_desc.extra_bits = extra_lbits;
|
|
||||||
+ G2.l_desc.extra_base = LITERALS + 1;
|
|
||||||
+ G2.l_desc.elems = L_CODES;
|
|
||||||
+ G2.l_desc.max_length = MAX_BITS;
|
|
||||||
+ //G2.l_desc.max_code = 0;
|
|
||||||
+ G2.d_desc.dyn_tree = G2.dyn_dtree;
|
|
||||||
+ G2.d_desc.static_tree = G2.static_dtree;
|
|
||||||
+ G2.d_desc.extra_bits = extra_dbits;
|
|
||||||
+ //G2.d_desc.extra_base = 0;
|
|
||||||
+ G2.d_desc.elems = D_CODES;
|
|
||||||
+ G2.d_desc.max_length = MAX_BITS;
|
|
||||||
+ //G2.d_desc.max_code = 0;
|
|
||||||
+ G2.bl_desc.dyn_tree = G2.bl_tree;
|
|
||||||
+ //G2.bl_desc.static_tree = NULL;
|
|
||||||
+ G2.bl_desc.extra_bits = extra_blbits,
|
|
||||||
+ //G2.bl_desc.extra_base = 0;
|
|
||||||
+ G2.bl_desc.elems = BL_CODES;
|
|
||||||
+ G2.bl_desc.max_length = MAX_BL_BITS;
|
|
||||||
+ //G2.bl_desc.max_code = 0;
|
|
||||||
+
|
|
||||||
s.st_ctime = 0;
|
|
||||||
fstat(STDIN_FILENO, &s);
|
|
||||||
zip(s.st_ctime);
|
|
||||||
@@ -2064,29 +2081,6 @@
|
|
||||||
SET_PTR_TO_GLOBALS(xzalloc(sizeof(struct globals) + sizeof(struct globals2))
|
|
||||||
+ sizeof(struct globals));
|
|
||||||
barrier();
|
|
||||||
- G2.l_desc.dyn_tree = G2.dyn_ltree;
|
|
||||||
- G2.l_desc.static_tree = G2.static_ltree;
|
|
||||||
- G2.l_desc.extra_bits = extra_lbits;
|
|
||||||
- G2.l_desc.extra_base = LITERALS + 1;
|
|
||||||
- G2.l_desc.elems = L_CODES;
|
|
||||||
- G2.l_desc.max_length = MAX_BITS;
|
|
||||||
- //G2.l_desc.max_code = 0;
|
|
||||||
-
|
|
||||||
- G2.d_desc.dyn_tree = G2.dyn_dtree;
|
|
||||||
- G2.d_desc.static_tree = G2.static_dtree;
|
|
||||||
- G2.d_desc.extra_bits = extra_dbits;
|
|
||||||
- //G2.d_desc.extra_base = 0;
|
|
||||||
- G2.d_desc.elems = D_CODES;
|
|
||||||
- G2.d_desc.max_length = MAX_BITS;
|
|
||||||
- //G2.d_desc.max_code = 0;
|
|
||||||
-
|
|
||||||
- G2.bl_desc.dyn_tree = G2.bl_tree;
|
|
||||||
- //G2.bl_desc.static_tree = NULL;
|
|
||||||
- G2.bl_desc.extra_bits = extra_blbits,
|
|
||||||
- //G2.bl_desc.extra_base = 0;
|
|
||||||
- G2.bl_desc.elems = BL_CODES;
|
|
||||||
- G2.bl_desc.max_length = MAX_BL_BITS;
|
|
||||||
- //G2.bl_desc.max_code = 0;
|
|
||||||
|
|
||||||
/* Allocate all global buffers (for DYN_ALLOC option) */
|
|
||||||
ALLOC(uch, G1.l_buf, INBUFSIZ);
|
|
@ -1,35 +0,0 @@
|
|||||||
--- busybox-1.14.0/include/libbb.h Tue Apr 14 02:50:20 2009
|
|
||||||
+++ busybox-1.14.0-libbb/include/libbb.h Fri May 15 23:22:02 2009
|
|
||||||
@@ -965,6 +965,12 @@
|
|
||||||
/* How long the longest ESC sequence we know? */
|
|
||||||
KEYCODE_BUFFER_SIZE = 4
|
|
||||||
};
|
|
||||||
+/* Note: fd may be in blocking or non-blocking mode, both make sense.
|
|
||||||
+ * For one, less uses non-blocking mode.
|
|
||||||
+ * Only the first read syscall inside read_key may block indefinitely
|
|
||||||
+ * (unless fd is in non-blocking mode),
|
|
||||||
+ * subsequent reads will time out after a few milliseconds.
|
|
||||||
+ */
|
|
||||||
int read_key(int fd, smalluint *nbuffered, char *buffer) FAST_FUNC;
|
|
||||||
|
|
||||||
|
|
||||||
--- busybox-1.14.0/libbb/read.c Tue Apr 14 01:43:00 2009
|
|
||||||
+++ busybox-1.14.0-libbb/libbb/read.c Fri May 15 23:22:02 2009
|
|
||||||
@@ -229,7 +229,7 @@
|
|
||||||
if (size > 64*1024)
|
|
||||||
size = 64*1024;
|
|
||||||
}
|
|
||||||
- xrealloc(buf, total + 1);
|
|
||||||
+ buf = xrealloc(buf, total + 1);
|
|
||||||
buf[total] = '\0';
|
|
||||||
|
|
||||||
if (maxsz_p)
|
|
||||||
@@ -273,7 +273,7 @@
|
|
||||||
free(buf);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
- xrealloc(buf, size + 1);
|
|
||||||
+ buf = xrealloc(buf, size + 1);
|
|
||||||
buf[size] = '\0';
|
|
||||||
|
|
||||||
if (maxsz_p)
|
|
@ -1,14 +0,0 @@
|
|||||||
--- busybox-1.14.0/util-linux/mdev.c Tue Apr 14 23:23:04 2009
|
|
||||||
+++ busybox-1.14.0-mdev/util-linux/mdev.c Fri May 1 03:04:28 2009
|
|
||||||
@@ -524,7 +524,10 @@
|
|
||||||
make_device(temp, 1);
|
|
||||||
}
|
|
||||||
else if (strcmp(action, "add") == 0) {
|
|
||||||
- make_device(temp, 0);
|
|
||||||
+ /* N.B. make_device() mangles the device path, so save it */
|
|
||||||
+ char *s = xstrdup(temp);
|
|
||||||
+ make_device(s, 0);
|
|
||||||
+ free(s);
|
|
||||||
if (ENABLE_FEATURE_MDEV_LOAD_FIRMWARE) {
|
|
||||||
if (fw)
|
|
||||||
load_firmware(fw, temp);
|
|
@ -1,18 +0,0 @@
|
|||||||
--- busybox-1.14.0/procps/sysctl.c Tue Apr 14 01:43:09 2009
|
|
||||||
+++ busybox-1.14.0-sysctl/procps/sysctl.c Sun May 10 23:40:52 2009
|
|
||||||
@@ -214,11 +214,11 @@
|
|
||||||
// (but _whitespace_ from ends should be trimmed first (and we do it right))
|
|
||||||
//TODO: "var==1" is mishandled (must use "=1" as a value, but uses "1")
|
|
||||||
while (config_read(parser, token, 2, 2, "# \t=", PARSE_NORMAL)) {
|
|
||||||
+ char *tp;
|
|
||||||
sysctl_dots_to_slashes(token[0]);
|
|
||||||
- /* Save ~4 bytes by using parser internals */
|
|
||||||
- /* parser->line is big enough for sprintf */
|
|
||||||
- sprintf(parser->line, "%s=%s", token[0], token[1]);
|
|
||||||
- sysctl_act_recursive(parser->line);
|
|
||||||
+ tp = xasprintf("%s=%s", token[0], token[1]);
|
|
||||||
+ sysctl_act_recursive(tp);
|
|
||||||
+ free(tp);
|
|
||||||
}
|
|
||||||
if (ENABLE_FEATURE_CLEAN_UP)
|
|
||||||
config_close(parser);
|
|
@ -1,14 +0,0 @@
|
|||||||
--- busybox-1.14.0/include/platform.h Tue Apr 14 01:43:05 2009
|
|
||||||
+++ busybox-1.14.0-unaligned/include/platform.h Sat Apr 18 00:14:34 2009
|
|
||||||
@@ -173,7 +173,10 @@
|
|
||||||
/* performs reasonably well (gcc usually inlines memcpy here) */
|
|
||||||
#define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2))
|
|
||||||
#define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4))
|
|
||||||
-#define move_to_unaligned32(u32p, v) (memcpy((u32p), &(v), 4))
|
|
||||||
+#define move_to_unaligned32(u32p, v) do { \
|
|
||||||
+ uint32_t __t = (v); \
|
|
||||||
+ memcpy((u32p), &__t, 4); \
|
|
||||||
+} while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ---- Networking ------------------------------------------ */
|
|
@ -0,0 +1,22 @@
|
|||||||
|
diff -urpN busybox-1.14.1/networking/ftpd.c busybox-1.14.1-ftpd/networking/ftpd.c
|
||||||
|
--- busybox-1.14.1/networking/ftpd.c 2009-05-27 18:00:23.000000000 +0200
|
||||||
|
+++ busybox-1.14.1-ftpd/networking/ftpd.c 2009-06-04 18:59:49.000000000 +0200
|
||||||
|
@@ -1320,6 +1320,8 @@ int ftpd_main(int argc UNUSED_PARAM, cha
|
||||||
|
handle_appe();
|
||||||
|
else if (cmdval == const_STOU) /* "store unique" */
|
||||||
|
handle_stou();
|
||||||
|
+ else
|
||||||
|
+ goto bad_cmd;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
@@ -1340,6 +1342,9 @@ int ftpd_main(int argc UNUSED_PARAM, cha
|
||||||
|
* (doesn't necessarily mean "we must support them")
|
||||||
|
* foo 1.2.3: XXXX - comment
|
||||||
|
*/
|
||||||
|
+#if ENABLE_FEATURE_FTP_WRITE
|
||||||
|
+ bad_cmd:
|
||||||
|
+#endif
|
||||||
|
cmdio_write_raw(STR(FTP_BADCMD)" Unknown command\r\n");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,132 @@
|
|||||||
|
diff -urpN busybox-1.14.1/modutils/modprobe.c busybox-1.14.1-modprobe/modutils/modprobe.c
|
||||||
|
--- busybox-1.14.1/modutils/modprobe.c 2009-05-27 18:01:37.000000000 +0200
|
||||||
|
+++ busybox-1.14.1-modprobe/modutils/modprobe.c 2009-06-04 19:01:04.000000000 +0200
|
||||||
|
@@ -8,12 +8,17 @@
|
||||||
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+/* Note that unlike older versions of modules.dep/depmod (busybox and m-i-t),
|
||||||
|
+ * we expect the full dependency list to be specified in modules.dep. Older
|
||||||
|
+ * versions would only export the direct dependency list.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
#include "libbb.h"
|
||||||
|
#include "modutils.h"
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
#include <fnmatch.h>
|
||||||
|
|
||||||
|
-//#define DBG(...) bb_error_msg(__VA_ARGS__)
|
||||||
|
+//#define DBG(fmt, ...) bb_error_msg("%s: " fmt, __func__, ## __VA_ARGS__)
|
||||||
|
#define DBG(...) ((void)0)
|
||||||
|
|
||||||
|
#define MODULE_FLAG_LOADED 0x0001
|
||||||
|
@@ -116,6 +121,7 @@ static void add_probe(const char *name)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ DBG("queuing %s", name);
|
||||||
|
m->probed_name = name;
|
||||||
|
m->flags |= MODULE_FLAG_NEED_DEPS;
|
||||||
|
llist_add_to_end(&G.probes, m);
|
||||||
|
@@ -205,9 +211,10 @@ static int read_config(const char *path)
|
||||||
|
|
||||||
|
static int do_modprobe(struct module_entry *m)
|
||||||
|
{
|
||||||
|
- struct module_entry *m2;
|
||||||
|
+ struct module_entry *m2 = m2; /* for compiler */
|
||||||
|
char *fn, *options;
|
||||||
|
- int rc = -1;
|
||||||
|
+ int rc, first;
|
||||||
|
+ llist_t *l;
|
||||||
|
|
||||||
|
if (!(m->flags & MODULE_FLAG_FOUND_IN_MODDEP)) {
|
||||||
|
DBG("skipping %s, not found in modules.dep", m->modname);
|
||||||
|
@@ -218,13 +225,25 @@ static int do_modprobe(struct module_ent
|
||||||
|
if (!(option_mask32 & MODPROBE_OPT_REMOVE))
|
||||||
|
m->deps = llist_rev(m->deps);
|
||||||
|
|
||||||
|
+ for (l = m->deps; l != NULL; l = l->link)
|
||||||
|
+ DBG("dep: %s", l->data);
|
||||||
|
+
|
||||||
|
+ first = 1;
|
||||||
|
rc = 0;
|
||||||
|
while (m->deps && rc == 0) {
|
||||||
|
fn = llist_pop(&m->deps);
|
||||||
|
m2 = get_or_add_modentry(fn);
|
||||||
|
if (option_mask32 & MODPROBE_OPT_REMOVE) {
|
||||||
|
- if (bb_delete_module(m->modname, O_EXCL) != 0)
|
||||||
|
- rc = errno;
|
||||||
|
+ if (m2->flags & MODULE_FLAG_LOADED) {
|
||||||
|
+ if (bb_delete_module(m2->modname, O_EXCL) != 0) {
|
||||||
|
+ if (first)
|
||||||
|
+ rc = errno;
|
||||||
|
+ } else {
|
||||||
|
+ m2->flags &= ~MODULE_FLAG_LOADED;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ /* do not error out if *deps* fail to unload */
|
||||||
|
+ first = 0;
|
||||||
|
} else if (!(m2->flags & MODULE_FLAG_LOADED)) {
|
||||||
|
options = m2->options;
|
||||||
|
m2->options = NULL;
|
||||||
|
@@ -242,11 +261,10 @@ static int do_modprobe(struct module_ent
|
||||||
|
free(fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
-//FIXME: what if rc < 0?
|
||||||
|
- if (rc > 0 && !(option_mask32 & INSMOD_OPT_SILENT)) {
|
||||||
|
+ if (rc && !(option_mask32 & INSMOD_OPT_SILENT)) {
|
||||||
|
bb_error_msg("failed to %sload module %s: %s",
|
||||||
|
(option_mask32 & MODPROBE_OPT_REMOVE) ? "un" : "",
|
||||||
|
- m->probed_name ? m->probed_name : m->modname,
|
||||||
|
+ m2->probed_name ? m2->probed_name : m2->modname,
|
||||||
|
moderror(rc)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@@ -294,7 +312,8 @@ static void load_modules_dep(void)
|
||||||
|
llist_add_to(&m->deps, xstrdup(tokens[0]));
|
||||||
|
if (tokens[1])
|
||||||
|
string_to_llist(tokens[1], &m->deps, " ");
|
||||||
|
- }
|
||||||
|
+ } else
|
||||||
|
+ DBG("skipping dep line");
|
||||||
|
}
|
||||||
|
config_close(p);
|
||||||
|
}
|
||||||
|
@@ -344,10 +363,12 @@ int modprobe_main(int argc UNUSED_PARAM,
|
||||||
|
if (opt & (MODPROBE_OPT_INSERT_ALL | MODPROBE_OPT_REMOVE)) {
|
||||||
|
/* Each argument is a module name */
|
||||||
|
do {
|
||||||
|
+ DBG("adding module %s", *argv);
|
||||||
|
add_probe(*argv++);
|
||||||
|
} while (*argv);
|
||||||
|
} else {
|
||||||
|
/* First argument is module name, rest are parameters */
|
||||||
|
+ DBG("probing just module %s", *argv);
|
||||||
|
add_probe(argv[0]);
|
||||||
|
G.cmdline_mopts = parse_cmdline_module_options(argv);
|
||||||
|
}
|
||||||
|
diff -urpN busybox-1.14.1/modutils/modprobe-small.c busybox-1.14.1-modprobe/modutils/modprobe-small.c
|
||||||
|
--- busybox-1.14.1/modutils/modprobe-small.c 2009-05-27 18:00:23.000000000 +0200
|
||||||
|
+++ busybox-1.14.1-modprobe/modutils/modprobe-small.c 2009-06-04 19:01:28.000000000 +0200
|
||||||
|
@@ -656,7 +656,7 @@ depmod -[aA] [-n -e -v -q -V -r -u]
|
||||||
|
[-b basedirectory] [forced_version]
|
||||||
|
depmod [-n -e -v -q -r -u] [-F kernelsyms] module1.ko module2.ko ...
|
||||||
|
If no arguments (except options) are given, "depmod -a" is assumed.
|
||||||
|
-depmod will output a dependancy list suitable for the modprobe utility.
|
||||||
|
+depmod will output a dependency list suitable for the modprobe utility.
|
||||||
|
Options:
|
||||||
|
-a, --all Probe all modules
|
||||||
|
-A, --quick Only does the work if there's a new module
|
||||||
|
diff -urpN busybox-1.14.1/modutils/modutils.c busybox-1.14.1-modprobe/modutils/modutils.c
|
||||||
|
--- busybox-1.14.1/modutils/modutils.c 2009-05-27 18:00:23.000000000 +0200
|
||||||
|
+++ busybox-1.14.1-modprobe/modutils/modutils.c 2009-06-03 12:50:48.000000000 +0200
|
||||||
|
@@ -57,7 +57,7 @@ char * FAST_FUNC filename2modname(const
|
||||||
|
from = bb_get_last_path_component_nostrip(filename);
|
||||||
|
for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++)
|
||||||
|
modname[i] = (from[i] == '-') ? '_' : from[i];
|
||||||
|
- modname[i] = 0;
|
||||||
|
+ modname[i] = '\0';
|
||||||
|
|
||||||
|
return modname;
|
||||||
|
}
|
@ -1 +1 @@
|
|||||||
http://busybox.net/downloads/busybox-1.14.0.tar.bz2
|
http://busybox.net/downloads/busybox-1.14.1.tar.bz2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user