← Commit list

8eeb65566

Paul Fox
Paul Fox
2005-08-04
SOURCE BUG Duration: 11s

Subject

applying jim bauer's patch to eliminate modprobe's dependency on /bin/sh. bug #8. 0000008: modprobe applet is dependent on having a shell

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

AUTHORS+3 -0
@@ -29,6 +29,9 @@ Jeff Angielski <[email protected]>
Enrik Berkhan <[email protected]>
setconsole
+Jim Bauer <[email protected]>
+ modprobe shell dependency
+
Edward Betts <[email protected]>
expr, hostid, logname, whoami
modutils/modprobe.c+51 -13
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002 by Robert Griebl, [email protected]
* Copyright (c) 2003 by Andrew Dennison, [email protected]
+ * Copyright (c) 2005 by Jim Bauer, [email protected]
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,6 +23,8 @@
*/
#include <sys/utsname.h>
+#include <sys/types.h>
+#include <sys/wait.h>
#include <getopt.h>
#include <stdlib.h>
#include <unistd.h>
@@ -393,30 +396,65 @@ static int already_loaded (const char *name)
static int mod_process ( struct mod_list_t *list, int do_insert )
{
- char lcmd [4096];
int rc = 0;
+ char *argv[10];
+ int argc;
while ( list ) {
- *lcmd = '\0';
+ argc = 0;
if ( do_insert ) {
- if (already_loaded (list->m_name) != 1)
- snprintf ( lcmd, sizeof( lcmd ) - 1, "insmod %s %s %s %s %s",
- do_syslog ? "-s" : "", autoclean ? "-k" : "",
- quiet ? "-q" : "", list-> m_path, list-> m_options ?
- list-> m_options : "" );
+ if (already_loaded (list->m_name) != 1) {
+ argv[argc++] = "insmod";
+ if (do_syslog)
+ argv[argc++] = "-s";
+ if (autoclean)
+ argv[argc++] = "-k";
+ if (quiet)
+ argv[argc++] = "-q";
+ argv[argc++] = list-> m_path;
+ if (list-> m_options)
+ argv[argc++] = list-> m_options;
+ }
} else {
/* modutils uses short name for removal */
- if (already_loaded (list->m_name) != 0)
- snprintf ( lcmd, sizeof( lcmd ) - 1, "rmmod %s %s",
- do_syslog ? "-s" : "", list-> m_name );
+ if (already_loaded (list->m_name) != 0) {
+ argv[argc++] = "rmmod";
+ if (do_syslog)
+ argv[argc++] = "-s";
+ argv[argc++] = list->m_name;
+ }
}
+ argv[argc] = NULL;
- if (*lcmd) {
+ if (argc) {
if (verbose) {
- printf("%s\n", lcmd);
+ int i;
+ for (i=0; i<argc; i++)
+ printf("%s ", argv[i]);
+ printf("\n");
}
if (!show_only) {
- int rc2 = system(lcmd);
+ int rc2 = 0;
+ int status;
+ switch (fork()) {
+ case -1:
+ rc2 = 1;
+ break;
+ case 0: //child
+ execvp(argv[0], argv);
+ bb_perror_msg_and_die("exec of %s", argv[0]);
+ /* NOTREACHED */
+ default:
+ if (wait(&status) == -1) {
+ rc2 = 1;
+ break;
+ }
+ if (WIFEXITED(status))
+ rc2 = WEXITSTATUS(status);
+ if (WIFSIGNALED(status))
+ rc2 = WTERMSIG(status);
+ break;
+ }
if (do_insert) {
rc = rc2; /* only last module matters */
}