Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/procps/kill.c
- Timestamp:
- Dec 20, 2016, 4:07:32 PM (7 years ago)
- Location:
- branches/3.3
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mindi-busybox/procps/kill.c
r3232 r3621 61 61 */ 62 62 63 int kill_main(int argc , char **argv)63 int kill_main(int argc UNUSED_PARAM, char **argv) 64 64 { 65 65 char *arg; … … 80 80 81 81 /* Parse any options */ 82 argc--;83 82 arg = *++argv; 84 83 85 if ( argc < 1|| arg[0] != '-') {84 if (!arg || arg[0] != '-') { 86 85 goto do_it_now; 87 86 } … … 92 91 * We try to mimic what kill from coreutils-6.8 does */ 93 92 if (arg[1] == 'l' && arg[2] == '\0') { 94 if (argc == 1) { 93 arg = *++argv; 94 if (!arg) { 95 95 /* Print the whole signal list */ 96 96 print_signames(); … … 98 98 } 99 99 /* -l <sig list> */ 100 while ((arg = *++argv)){100 do { 101 101 if (isdigit(arg[0])) { 102 102 signo = bb_strtou(arg, NULL, 10); … … 119 119 printf("%d\n", signo); 120 120 } 121 }122 /* If they specified -l, we are all done */121 arg = *++argv; 122 } while (arg); 123 123 return EXIT_SUCCESS; 124 124 } … … 128 128 quiet = 1; 129 129 arg = *++argv; 130 argc--; 131 if (argc < 1) 130 if (!arg) 132 131 bb_show_usage(); 133 132 if (arg[0] != '-') … … 141 140 goto do_it_now; 142 141 143 if (argc > 1 && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */ 144 argc--; 142 if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */ 145 143 arg = *++argv; 146 144 } /* else it must be -SIG */ … … 151 149 } 152 150 arg = *++argv; 153 argc--;154 151 155 152 do_it_now: … … 159 156 pid_t sid; 160 157 procps_status_t* p = NULL; 161 int ret = 0; 158 /* compat: exitcode 2 is "no one was signaled" */ 159 int ret = 2; 162 160 163 161 /* Find out our session id */ … … 168 166 /* Signal all processes except those in our session */ 169 167 while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) { 170 int i;168 char **args; 171 169 172 170 if (p->sid == (unsigned)sid 171 || p->sid == 0 /* compat: kernel thread, don't signal it */ 173 172 || p->pid == (unsigned)pid 174 173 || p->pid == 1 … … 179 178 /* All remaining args must be -o PID options. 180 179 * Check p->pid against them. */ 181 for (i = 0; i < argc; i++) { 180 args = argv; 181 while (*args) { 182 182 pid_t omit; 183 183 184 arg = argv[i];184 arg = *args++; 185 185 if (arg[0] != '-' || arg[1] != 'o') { 186 186 bb_error_msg("bad option '%s'", arg); … … 189 189 } 190 190 arg += 2; 191 if (!arg[0] && argv[++i])192 arg = argv[i];191 if (!arg[0] && *args) 192 arg = *args++; 193 193 omit = bb_strtoi(arg, NULL, 10); 194 194 if (errno) { … … 201 201 } 202 202 kill(p->pid, signo); 203 ret = 0; 203 204 dont_kill: ; 204 205 } … … 211 212 212 213 /* Pid or name is required for kill/killall */ 213 if ( argc < 1) {214 if (!arg) { 214 215 bb_error_msg("you need to specify whom to kill"); 215 216 return EXIT_FAILURE; … … 218 219 if (killall) { 219 220 /* Looks like they want to do a killall. Do that */ 220 while (arg){221 do { 221 222 pid_t* pidList; 222 223 … … 241 242 free(pidList); 242 243 arg = *++argv; 243 } 244 } while (arg); 244 245 return errors; 245 246 }
Note:
See TracChangeset
for help on using the changeset viewer.