15 |
int rmmod_main(int argc UNUSED_PARAM, char **argv) |
int rmmod_main(int argc UNUSED_PARAM, char **argv) |
16 |
{ |
{ |
17 |
int n; |
int n; |
18 |
unsigned int flags = O_NONBLOCK|O_EXCL; |
unsigned flags = O_NONBLOCK | O_EXCL; |
19 |
|
|
20 |
/* Parse command line. */ |
/* Parse command line. */ |
21 |
n = getopt32(argv, "wfas"); // -s ignored |
n = getopt32(argv, "wfas"); // -s ignored |
22 |
argv += optind; |
argv += optind; |
|
|
|
23 |
if (n & 1) // --wait |
if (n & 1) // --wait |
24 |
flags &= ~O_NONBLOCK; |
flags &= ~O_NONBLOCK; |
25 |
if (n & 2) // --force |
if (n & 2) // --force |
34 |
if (!*argv) |
if (!*argv) |
35 |
bb_show_usage(); |
bb_show_usage(); |
36 |
|
|
37 |
|
n = ENABLE_FEATURE_2_4_MODULES && get_linux_version_code() < KERNEL_VERSION(2,6,0); |
38 |
while (*argv) { |
while (*argv) { |
39 |
char modname[MODULE_NAME_LEN]; |
char modname[MODULE_NAME_LEN]; |
40 |
filename2modname(bb_basename(*argv++), modname); |
const char *bname; |
41 |
|
|
42 |
|
bname = bb_basename(*argv++); |
43 |
|
if (n) |
44 |
|
safe_strncpy(modname, bname, MODULE_NAME_LEN); |
45 |
|
else |
46 |
|
filename2modname(bname, modname); |
47 |
if (bb_delete_module(modname, flags)) |
if (bb_delete_module(modname, flags)) |
48 |
bb_error_msg_and_die("cannot unload '%s': %s", |
bb_error_msg_and_die("can't unload '%s': %s", |
49 |
modname, moderror(errno)); |
modname, moderror(errno)); |
50 |
} |
} |
51 |
|
|