diff options
-rw-r--r-- | docs/idevicesyslog.1 | 9 | ||||
-rw-r--r-- | tools/idevicesyslog.c | 30 |
2 files changed, 36 insertions, 3 deletions
diff --git a/docs/idevicesyslog.1 b/docs/idevicesyslog.1 index b7d4bab..66ae2e4 100644 --- a/docs/idevicesyslog.1 +++ b/docs/idevicesyslog.1 | |||
@@ -27,10 +27,17 @@ enable communication debugging | |||
27 | prints usage information | 27 | prints usage information |
28 | .TP | 28 | .TP |
29 | .B \-v, \-\-version | 29 | .B \-v, \-\-version |
30 | prints version information. | 30 | Prints version information. |
31 | .TP | 31 | .TP |
32 | .B \-\-no\-colors | 32 | .B \-\-no\-colors |
33 | disable colored output | 33 | disable colored output |
34 | .TP | ||
35 | .B \-o, \-\-output FILE | ||
36 | Write to FILE instead of stdout. This will disable writing colored output, but can be re-enabled with \f[B]\-\-colors\f[]. | ||
37 | If FILE already exists, it will be overwritten without warning. | ||
38 | .TP | ||
39 | .B \-\-colors | ||
40 | Force writing colored output, e.g. when using \f[B]\-\-output\f[]. | ||
34 | 41 | ||
35 | .SH FILTER OPTIONS | 42 | .SH FILTER OPTIONS |
36 | .TP | 43 | .TP |
diff --git a/tools/idevicesyslog.c b/tools/idevicesyslog.c index 5600be2..a0e641d 100644 --- a/tools/idevicesyslog.c +++ b/tools/idevicesyslog.c | |||
@@ -480,7 +480,10 @@ static void print_usage(int argc, char **argv, int is_error) | |||
480 | " -h, --help prints usage information\n" | 480 | " -h, --help prints usage information\n" |
481 | " -d, --debug enable communication debugging\n" | 481 | " -d, --debug enable communication debugging\n" |
482 | " -v, --version prints version information\n" | 482 | " -v, --version prints version information\n" |
483 | " --no-colors disable colored output\n" | 483 | " --no-colors disable colored output\n" |
484 | " -o, --output FILE write to FILE instead of stdout\n" | ||
485 | " (existing FILE will be overwritten)\n" | ||
486 | " --colors force writing colored output, e.g. for --output\n" | ||
484 | "\n" | 487 | "\n" |
485 | "FILTER OPTIONS:\n" | 488 | "FILTER OPTIONS:\n" |
486 | " -m, --match STRING only print messages that contain STRING\n" | 489 | " -m, --match STRING only print messages that contain STRING\n" |
@@ -508,6 +511,7 @@ int main(int argc, char *argv[]) | |||
508 | int exclude_filter = 0; | 511 | int exclude_filter = 0; |
509 | int include_kernel = 0; | 512 | int include_kernel = 0; |
510 | int exclude_kernel = 0; | 513 | int exclude_kernel = 0; |
514 | int force_colors = 0; | ||
511 | int c = 0; | 515 | int c = 0; |
512 | const struct option longopts[] = { | 516 | const struct option longopts[] = { |
513 | { "debug", no_argument, NULL, 'd' }, | 517 | { "debug", no_argument, NULL, 'd' }, |
@@ -525,6 +529,8 @@ int main(int argc, char *argv[]) | |||
525 | { "no-kernel", no_argument, NULL, 'K' }, | 529 | { "no-kernel", no_argument, NULL, 'K' }, |
526 | { "quiet-list", no_argument, NULL, 1 }, | 530 | { "quiet-list", no_argument, NULL, 1 }, |
527 | { "no-colors", no_argument, NULL, 2 }, | 531 | { "no-colors", no_argument, NULL, 2 }, |
532 | { "colors", no_argument, NULL, 3 }, | ||
533 | { "output", required_argument, NULL, 'o' }, | ||
528 | { "version", no_argument, NULL, 'v' }, | 534 | { "version", no_argument, NULL, 'v' }, |
529 | { NULL, 0, NULL, 0} | 535 | { NULL, 0, NULL, 0} |
530 | }; | 536 | }; |
@@ -536,7 +542,7 @@ int main(int argc, char *argv[]) | |||
536 | signal(SIGPIPE, SIG_IGN); | 542 | signal(SIGPIPE, SIG_IGN); |
537 | #endif | 543 | #endif |
538 | 544 | ||
539 | while ((c = getopt_long(argc, argv, "dhu:nxt:T:m:e:p:qkKv", longopts, NULL)) != -1) { | 545 | while ((c = getopt_long(argc, argv, "dhu:nxt:T:m:e:p:qkKo:v", longopts, NULL)) != -1) { |
540 | switch (c) { | 546 | switch (c) { |
541 | case 'd': | 547 | case 'd': |
542 | idevice_set_debug_level(1); | 548 | idevice_set_debug_level(1); |
@@ -638,6 +644,22 @@ int main(int argc, char *argv[]) | |||
638 | case 2: | 644 | case 2: |
639 | term_colors_set_enabled(0); | 645 | term_colors_set_enabled(0); |
640 | break; | 646 | break; |
647 | case 3: | ||
648 | force_colors = 1; | ||
649 | break; | ||
650 | case 'o': | ||
651 | if (!*optarg) { | ||
652 | fprintf(stderr, "ERROR: --output option requires an argument!\n"); | ||
653 | print_usage(argc, argv, 1); | ||
654 | return 2; | ||
655 | } else { | ||
656 | if (freopen(optarg, "w", stdout) == NULL) { | ||
657 | fprintf(stderr, "ERROR: Failed to open output file '%s' for writing: %s\n", optarg, strerror(errno)); | ||
658 | return 1; | ||
659 | } | ||
660 | term_colors_set_enabled(0); | ||
661 | } | ||
662 | break; | ||
641 | case 'v': | 663 | case 'v': |
642 | printf("%s %s\n", TOOL_NAME, PACKAGE_VERSION); | 664 | printf("%s %s\n", TOOL_NAME, PACKAGE_VERSION); |
643 | return 0; | 665 | return 0; |
@@ -647,6 +669,10 @@ int main(int argc, char *argv[]) | |||
647 | } | 669 | } |
648 | } | 670 | } |
649 | 671 | ||
672 | if (force_colors) { | ||
673 | term_colors_set_enabled(1); | ||
674 | } | ||
675 | |||
650 | if (include_kernel > 0 && exclude_kernel > 0) { | 676 | if (include_kernel > 0 && exclude_kernel > 0) { |
651 | fprintf(stderr, "ERROR: -k and -K cannot be used together.\n"); | 677 | fprintf(stderr, "ERROR: -k and -K cannot be used together.\n"); |
652 | print_usage(argc, argv, 1); | 678 | print_usage(argc, argv, 1); |