diff options
-rw-r--r-- | applets/usage.h | 1 | ||||
-rw-r--r-- | cmp.c | 32 | ||||
-rw-r--r-- | coreutils/cmp.c | 32 | ||||
-rw-r--r-- | include/usage.h | 1 | ||||
-rw-r--r-- | usage.h | 1 |
5 files changed, 49 insertions, 18 deletions
diff --git a/applets/usage.h b/applets/usage.h index 1e3023d..d85857f 100644 --- a/applets/usage.h +++ b/applets/usage.h @@ -115,6 +115,7 @@ #define cmp_trivial_usage \ "FILE1 [FILE2]" #define cmp_full_usage \ + "\t-s\tquiet mode - do not print\n" \ "Compare files." #define cp_trivial_usage \ @@ -26,28 +26,42 @@ #include <string.h> #include <errno.h> #include <stdlib.h> +#include <getopt.h> #include "busybox.h" int cmp_main(int argc, char **argv) { FILE *fp1 = NULL, *fp2 = stdin; - char *filename1 = argv[1], *filename2 = "-"; - int c1, c2, char_pos = 1, line_pos = 1; + char *filename1, *filename2 = "-"; + int c, c1, c2, char_pos = 1, line_pos = 1, silent = FALSE; - /* parse argv[] */ - if (argc < 2 || 3 < argc) - show_usage(); + while ((c = getopt(argc, argv, "s")) != EOF) { + switch (c) { + case 's': + silent = TRUE; + break; + default: + show_usage(); + } + } - fp1 = xfopen(argv[1], "r"); - if (argv[2] != NULL) { - fp2 = xfopen(argv[2], "r"); - filename2 = argv[2]; + filename1 = argv[optind]; + switch (argc - optind) { + case 2: + fp2 = xfopen(filename2 = argv[optind + 1], "r"); + case 1: + fp1 = xfopen(filename1, "r"); + break; + default: + show_usage(); } do { c1 = fgetc(fp1); c2 = fgetc(fp2); if (c1 != c2) { + if (silent) + return EXIT_FAILURE; if (c1 == EOF) printf("EOF on %s\n", filename1); else if (c2 == EOF) diff --git a/coreutils/cmp.c b/coreutils/cmp.c index 24b6c3f..6d57946 100644 --- a/coreutils/cmp.c +++ b/coreutils/cmp.c @@ -26,28 +26,42 @@ #include <string.h> #include <errno.h> #include <stdlib.h> +#include <getopt.h> #include "busybox.h" int cmp_main(int argc, char **argv) { FILE *fp1 = NULL, *fp2 = stdin; - char *filename1 = argv[1], *filename2 = "-"; - int c1, c2, char_pos = 1, line_pos = 1; + char *filename1, *filename2 = "-"; + int c, c1, c2, char_pos = 1, line_pos = 1, silent = FALSE; - /* parse argv[] */ - if (argc < 2 || 3 < argc) - show_usage(); + while ((c = getopt(argc, argv, "s")) != EOF) { + switch (c) { + case 's': + silent = TRUE; + break; + default: + show_usage(); + } + } - fp1 = xfopen(argv[1], "r"); - if (argv[2] != NULL) { - fp2 = xfopen(argv[2], "r"); - filename2 = argv[2]; + filename1 = argv[optind]; + switch (argc - optind) { + case 2: + fp2 = xfopen(filename2 = argv[optind + 1], "r"); + case 1: + fp1 = xfopen(filename1, "r"); + break; + default: + show_usage(); } do { c1 = fgetc(fp1); c2 = fgetc(fp2); if (c1 != c2) { + if (silent) + return EXIT_FAILURE; if (c1 == EOF) printf("EOF on %s\n", filename1); else if (c2 == EOF) diff --git a/include/usage.h b/include/usage.h index 1e3023d..d85857f 100644 --- a/include/usage.h +++ b/include/usage.h @@ -115,6 +115,7 @@ #define cmp_trivial_usage \ "FILE1 [FILE2]" #define cmp_full_usage \ + "\t-s\tquiet mode - do not print\n" \ "Compare files." #define cp_trivial_usage \ @@ -115,6 +115,7 @@ #define cmp_trivial_usage \ "FILE1 [FILE2]" #define cmp_full_usage \ + "\t-s\tquiet mode - do not print\n" \ "Compare files." #define cp_trivial_usage \ |