diff options
-rw-r--r-- | tools/perf/perf.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/tools/perf/perf.c b/tools/perf/perf.c index 0f661fbce6a8..095b88207cd3 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c | |||
@@ -328,14 +328,23 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) | |||
328 | if (S_ISFIFO(st.st_mode) || S_ISSOCK(st.st_mode)) | 328 | if (S_ISFIFO(st.st_mode) || S_ISSOCK(st.st_mode)) |
329 | return 0; | 329 | return 0; |
330 | 330 | ||
331 | status = 1; | ||
331 | /* Check for ENOSPC and EIO errors.. */ | 332 | /* Check for ENOSPC and EIO errors.. */ |
332 | if (fflush(stdout)) | 333 | if (fflush(stdout)) { |
333 | die("write failure on standard output: %s", strerror(errno)); | 334 | fprintf(stderr, "write failure on standard output: %s", strerror(errno)); |
334 | if (ferror(stdout)) | 335 | goto out; |
335 | die("unknown write failure on standard output"); | 336 | } |
336 | if (fclose(stdout)) | 337 | if (ferror(stdout)) { |
337 | die("close failed on standard output: %s", strerror(errno)); | 338 | fprintf(stderr, "unknown write failure on standard output"); |
338 | return 0; | 339 | goto out; |
340 | } | ||
341 | if (fclose(stdout)) { | ||
342 | fprintf(stderr, "close failed on standard output: %s", strerror(errno)); | ||
343 | goto out; | ||
344 | } | ||
345 | status = 0; | ||
346 | out: | ||
347 | return status; | ||
339 | } | 348 | } |
340 | 349 | ||
341 | static void handle_internal_command(int argc, const char **argv) | 350 | static void handle_internal_command(int argc, const char **argv) |
@@ -467,7 +476,8 @@ int main(int argc, const char **argv) | |||
467 | cmd += 5; | 476 | cmd += 5; |
468 | argv[0] = cmd; | 477 | argv[0] = cmd; |
469 | handle_internal_command(argc, argv); | 478 | handle_internal_command(argc, argv); |
470 | die("cannot handle %s internally", cmd); | 479 | fprintf(stderr, "cannot handle %s internally", cmd); |
480 | goto out; | ||
471 | } | 481 | } |
472 | 482 | ||
473 | /* Look for flags.. */ | 483 | /* Look for flags.. */ |
@@ -485,7 +495,7 @@ int main(int argc, const char **argv) | |||
485 | printf("\n usage: %s\n\n", perf_usage_string); | 495 | printf("\n usage: %s\n\n", perf_usage_string); |
486 | list_common_cmds_help(); | 496 | list_common_cmds_help(); |
487 | printf("\n %s\n\n", perf_more_info_string); | 497 | printf("\n %s\n\n", perf_more_info_string); |
488 | exit(1); | 498 | goto out; |
489 | } | 499 | } |
490 | cmd = argv[0]; | 500 | cmd = argv[0]; |
491 | 501 | ||
@@ -517,7 +527,7 @@ int main(int argc, const char **argv) | |||
517 | fprintf(stderr, "Expansion of alias '%s' failed; " | 527 | fprintf(stderr, "Expansion of alias '%s' failed; " |
518 | "'%s' is not a perf-command\n", | 528 | "'%s' is not a perf-command\n", |
519 | cmd, argv[0]); | 529 | cmd, argv[0]); |
520 | exit(1); | 530 | goto out; |
521 | } | 531 | } |
522 | if (!done_help) { | 532 | if (!done_help) { |
523 | cmd = argv[0] = help_unknown_cmd(cmd); | 533 | cmd = argv[0] = help_unknown_cmd(cmd); |
@@ -528,6 +538,6 @@ int main(int argc, const char **argv) | |||
528 | 538 | ||
529 | fprintf(stderr, "Failed to run command '%s': %s\n", | 539 | fprintf(stderr, "Failed to run command '%s': %s\n", |
530 | cmd, strerror(errno)); | 540 | cmd, strerror(errno)); |
531 | 541 | out: | |
532 | return 1; | 542 | return 1; |
533 | } | 543 | } |