Another update from Larry:
[oweals/busybox.git] / cmp.c
diff --git a/cmp.c b/cmp.c
index 6b955447c0192b453bf437aae724a9ac1d86a0b5..6d579461da1e27e4d61a4cc5a5a25aecb378a5a1 100644 (file)
--- a/cmp.c
+++ b/cmp.c
@@ -3,7 +3,7 @@
  * Mini cmp implementation for busybox
  *
  *
- * Copyright (C) 2000 by Lineo, inc.
+ * Copyright (C) 1999,2000,2001 by Lineo, inc.
  * Written by Matt Kraai <kraai@alumni.carnegiemellon.edu>
  *
  * This program is free software; you can redistribute it and/or modify
  *
  */
 
-#include "busybox.h"
 #include <stdio.h>
 #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)
-               usage(cmp_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)