diff options
author | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-12-22 12:36:13 +0000 |
---|---|---|
committer | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-12-22 12:36:13 +0000 |
commit | 76f0932c615fed79545be25eefc91a30ddc8e809 (patch) | |
tree | 4af247ff3701729e8a9730052ecc675dff911c04 /miscutils | |
parent | b91b5f1dce8098f20849059d58aa978ca0ffeb9a (diff) | |
download | busybox-w32-76f0932c615fed79545be25eefc91a30ddc8e809.tar.gz busybox-w32-76f0932c615fed79545be25eefc91a30ddc8e809.tar.bz2 busybox-w32-76f0932c615fed79545be25eefc91a30ddc8e809.zip |
time: fix option parsing bug, size optimizations
git-svn-id: svn://busybox.net/trunk/busybox@17051 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/time.c | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/miscutils/time.c b/miscutils/time.c index 3f1451c83..7682a2679 100644 --- a/miscutils/time.c +++ b/miscutils/time.c | |||
@@ -65,11 +65,12 @@ static const char *const long_format = | |||
65 | "\tSocket messages sent: %s\n" | 65 | "\tSocket messages sent: %s\n" |
66 | "\tSocket messages received: %r\n" | 66 | "\tSocket messages received: %r\n" |
67 | "\tSignals delivered: %k\n" | 67 | "\tSignals delivered: %k\n" |
68 | "\tPage size (bytes): %Z\n" "\tExit status: %x"; | 68 | "\tPage size (bytes): %Z\n" |
69 | "\tExit status: %x"; | ||
69 | 70 | ||
70 | 71 | ||
71 | /* Wait for and fill in data on child process PID. | 72 | /* Wait for and fill in data on child process PID. |
72 | Return 0 on error, 1 if ok. */ | 73 | Return 0 on error, 1 if ok. */ |
73 | 74 | ||
74 | /* pid_t is short on BSDI, so don't try to promote it. */ | 75 | /* pid_t is short on BSDI, so don't try to promote it. */ |
75 | static int resuse_end(pid_t pid, resource_t * resp) | 76 | static int resuse_end(pid_t pid, resource_t * resp) |
@@ -110,8 +111,7 @@ static void fprintargv(FILE * fp, char *const *argv, const char *filler) | |||
110 | fputs(filler, fp); | 111 | fputs(filler, fp); |
111 | fputs(*av, fp); | 112 | fputs(*av, fp); |
112 | } | 113 | } |
113 | if (ferror(fp)) | 114 | die_if_ferror(fp, "output"); |
114 | bb_error_msg_and_die(bb_msg_write_error); | ||
115 | } | 115 | } |
116 | 116 | ||
117 | /* Return the number of kilobytes corresponding to a number of pages PAGES. | 117 | /* Return the number of kilobytes corresponding to a number of pages PAGES. |
@@ -381,13 +381,11 @@ static void summarize(FILE * fp, const char *fmt, char **command, | |||
381 | putc(*fmt++, fp); | 381 | putc(*fmt++, fp); |
382 | } | 382 | } |
383 | 383 | ||
384 | if (ferror(fp)) | 384 | die_if_ferror(fp, "output"); |
385 | bb_error_msg_and_die(bb_msg_write_error); | ||
386 | } | 385 | } |
387 | putc('\n', fp); | 386 | putc('\n', fp); |
388 | 387 | ||
389 | if (ferror(fp)) | 388 | die_if_ferror(fp, "output"); |
390 | bb_error_msg_and_die(bb_msg_write_error); | ||
391 | } | 389 | } |
392 | 390 | ||
393 | /* Run command CMD and return statistics on it. | 391 | /* Run command CMD and return statistics on it. |
@@ -423,18 +421,16 @@ static void run_command(char *const *cmd, resource_t * resp) | |||
423 | 421 | ||
424 | int time_main(int argc, char **argv) | 422 | int time_main(int argc, char **argv) |
425 | { | 423 | { |
426 | int gotone; | ||
427 | resource_t res; | 424 | resource_t res; |
428 | const char *output_format = default_format; | 425 | const char *output_format = default_format; |
426 | char c; | ||
429 | 427 | ||
430 | argc--; | 428 | goto next; |
431 | argv++; | ||
432 | /* Parse any options -- don't use getopt() here so we don't | 429 | /* Parse any options -- don't use getopt() here so we don't |
433 | * consume the args of our client application... */ | 430 | * consume the args of our client application... */ |
434 | while (argc > 0 && **argv == '-') { | 431 | while (argc > 0 && argv[0][0] == '-') { |
435 | gotone = 0; | 432 | while ((c = *++*argv)) { |
436 | while (gotone == 0 && *++(*argv)) { | 433 | switch (c) { |
437 | switch (**argv) { | ||
438 | case 'v': | 434 | case 'v': |
439 | output_format = long_format; | 435 | output_format = long_format; |
440 | break; | 436 | break; |
@@ -444,24 +440,22 @@ int time_main(int argc, char **argv) | |||
444 | default: | 440 | default: |
445 | bb_show_usage(); | 441 | bb_show_usage(); |
446 | } | 442 | } |
447 | argc--; | ||
448 | argv++; | ||
449 | gotone = 1; | ||
450 | } | 443 | } |
444 | next: | ||
445 | argv++; | ||
446 | argc--; | ||
447 | if (!argc) | ||
448 | bb_show_usage(); | ||
451 | } | 449 | } |
452 | 450 | ||
453 | if (argv == NULL || *argv == NULL) | ||
454 | bb_show_usage(); | ||
455 | |||
456 | run_command(argv, &res); | 451 | run_command(argv, &res); |
457 | summarize(stderr, output_format, argv, &res); | 452 | summarize(stderr, output_format, argv, &res); |
458 | fflush(stderr); | ||
459 | 453 | ||
460 | if (WIFSTOPPED(res.waitstatus)) | 454 | if (WIFSTOPPED(res.waitstatus)) |
461 | exit(WSTOPSIG(res.waitstatus)); | 455 | return WSTOPSIG(res.waitstatus); |
462 | else if (WIFSIGNALED(res.waitstatus)) | 456 | if (WIFSIGNALED(res.waitstatus)) |
463 | exit(WTERMSIG(res.waitstatus)); | 457 | return WTERMSIG(res.waitstatus); |
464 | else if (WIFEXITED(res.waitstatus)) | 458 | if (WIFEXITED(res.waitstatus)) |
465 | exit(WEXITSTATUS(res.waitstatus)); | 459 | return WEXITSTATUS(res.waitstatus); |
466 | return 0; | 460 | return 0; |
467 | } | 461 | } |