diff options
author | landley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-08-28 19:40:08 +0000 |
---|---|---|
committer | landley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-08-28 19:40:08 +0000 |
commit | 680deb07073f10d09509e43bbe68753b4abaa726 (patch) | |
tree | c330a3b93c62f67b2099d030b6d8c016d902c01a /modutils/rmmod.c | |
parent | 91e9e31ac059a4f9c08c6c0759591b569f320a3d (diff) | |
download | busybox-w32-680deb07073f10d09509e43bbe68753b4abaa726.tar.gz busybox-w32-680deb07073f10d09509e43bbe68753b4abaa726.tar.bz2 busybox-w32-680deb07073f10d09509e43bbe68753b4abaa726.zip |
No real need for my_query_module() and this eliminates some type-punned
pointer warning on certain gcc versions (and saves 38 bytes).
git-svn-id: svn://busybox.net/trunk/busybox@16003 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'modutils/rmmod.c')
-rw-r--r-- | modutils/rmmod.c | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/modutils/rmmod.c b/modutils/rmmod.c index 97650a4b2..8f210310d 100644 --- a/modutils/rmmod.c +++ b/modutils/rmmod.c | |||
@@ -8,28 +8,17 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include "busybox.h" | 10 | #include "busybox.h" |
11 | #include <stdio.h> | ||
12 | #include <errno.h> | ||
13 | #include <unistd.h> | ||
14 | #include <stdlib.h> | ||
15 | #include <getopt.h> | ||
16 | #include <fcntl.h> | ||
17 | #include <string.h> | ||
18 | #include <sys/utsname.h> | ||
19 | #include <sys/syscall.h> | 11 | #include <sys/syscall.h> |
20 | 12 | ||
21 | #ifdef CONFIG_FEATURE_2_6_MODULES | 13 | #ifdef CONFIG_FEATURE_2_6_MODULES |
22 | static inline void filename2modname(char *modname, const char *afterslash) | 14 | static inline void filename2modname(char *modname, const char *afterslash) |
23 | { | 15 | { |
24 | unsigned int i; | 16 | unsigned int i; |
25 | |||
26 | #if ENABLE_FEATURE_2_4_MODULES | ||
27 | int kr_chk = 1; | 17 | int kr_chk = 1; |
28 | if (get_linux_version_code() <= KERNEL_VERSION(2,6,0)) | 18 | |
29 | kr_chk = 0; | 19 | if (ENABLE_FEATURE_2_4_MODULES |
30 | #else | 20 | && get_linux_version_code() <= KERNEL_VERSION(2,6,0)) |
31 | #define kr_chk 1 | 21 | kr_chk = 0; |
32 | #endif | ||
33 | 22 | ||
34 | /* Convert to underscores, stop at first . */ | 23 | /* Convert to underscores, stop at first . */ |
35 | for (i = 0; afterslash[i] && afterslash[i] != '.'; i++) { | 24 | for (i = 0; afterslash[i] && afterslash[i] != '.'; i++) { |
@@ -40,17 +29,19 @@ static inline void filename2modname(char *modname, const char *afterslash) | |||
40 | } | 29 | } |
41 | modname[i] = '\0'; | 30 | modname[i] = '\0'; |
42 | } | 31 | } |
32 | #else | ||
33 | void filename2modname(char *modname, const char *afterslash); | ||
43 | #endif | 34 | #endif |
44 | 35 | ||
36 | // There really should be a header file for this... | ||
37 | |||
38 | int query_module(const char *name, int which, void *buf, | ||
39 | size_t bufsize, size_t *ret); | ||
40 | |||
45 | int rmmod_main(int argc, char **argv) | 41 | int rmmod_main(int argc, char **argv) |
46 | { | 42 | { |
47 | int n, ret = EXIT_SUCCESS; | 43 | int n, ret = EXIT_SUCCESS; |
48 | unsigned int flags = O_NONBLOCK|O_EXCL; | 44 | unsigned int flags = O_NONBLOCK|O_EXCL; |
49 | #ifdef CONFIG_FEATURE_QUERY_MODULE_INTERFACE | ||
50 | /* bb_common_bufsiz1 hold the module names which we ignore | ||
51 | but must get */ | ||
52 | size_t bufsize = sizeof(bb_common_bufsiz1); | ||
53 | #endif | ||
54 | 45 | ||
55 | /* Parse command line. */ | 46 | /* Parse command line. */ |
56 | n = bb_getopt_ulflags(argc, argv, "wfa"); | 47 | n = bb_getopt_ulflags(argc, argv, "wfa"); |
@@ -71,12 +62,13 @@ int rmmod_main(int argc, char **argv) | |||
71 | bb_perror_msg_and_die("rmmod"); | 62 | bb_perror_msg_and_die("rmmod"); |
72 | } | 63 | } |
73 | pnmod = nmod; | 64 | pnmod = nmod; |
74 | #ifdef CONFIG_FEATURE_QUERY_MODULE_INTERFACE | 65 | // the 1 here is QM_MODULES. |
75 | /* 1 == QM_MODULES */ | 66 | if (ENABLE_FEATURE_QUERY_MODULE_INTERFACE && query_module(NULL, |
76 | if (my_query_module(NULL, 1, &bb_common_bufsiz1, &bufsize, &nmod)) { | 67 | 1, bb_common_bufsiz1, sizeof(bb_common_bufsiz1), |
68 | &nmod)) | ||
69 | { | ||
77 | bb_perror_msg_and_die("QM_MODULES"); | 70 | bb_perror_msg_and_die("QM_MODULES"); |
78 | } | 71 | } |
79 | #endif | ||
80 | } | 72 | } |
81 | return EXIT_SUCCESS; | 73 | return EXIT_SUCCESS; |
82 | } | 74 | } |
@@ -85,21 +77,16 @@ int rmmod_main(int argc, char **argv) | |||
85 | bb_show_usage(); | 77 | bb_show_usage(); |
86 | 78 | ||
87 | for (n = optind; n < argc; n++) { | 79 | for (n = optind; n < argc; n++) { |
88 | #ifdef CONFIG_FEATURE_2_6_MODULES | 80 | if (ENABLE_FEATURE_2_6_MODULES) { |
89 | const char *afterslash; | 81 | const char *afterslash; |
90 | char *module_name; | ||
91 | 82 | ||
92 | afterslash = strrchr(argv[n], '/'); | 83 | afterslash = strrchr(argv[n], '/'); |
93 | if (!afterslash) | 84 | if (!afterslash) afterslash = argv[n]; |
94 | afterslash = argv[n]; | 85 | else afterslash++; |
95 | else | 86 | filename2modname(bb_common_bufsiz1, afterslash); |
96 | afterslash++; | 87 | } |
97 | module_name = alloca(strlen(afterslash) + 1); | 88 | |
98 | filename2modname(module_name, afterslash); | 89 | if (syscall(__NR_delete_module, ENABLE_FEATURE_2_6_MODULES ? bb_common_bufsiz1 : argv[n], flags)) { |
99 | #else | ||
100 | #define module_name argv[n] | ||
101 | #endif | ||
102 | if (syscall(__NR_delete_module, module_name, flags) != 0) { | ||
103 | bb_perror_msg("%s", argv[n]); | 90 | bb_perror_msg("%s", argv[n]); |
104 | ret = EXIT_FAILURE; | 91 | ret = EXIT_FAILURE; |
105 | } | 92 | } |