uniq: add -i option to ignore case
authorJody Bruchon <jody@jodybruchon.com>
Thu, 30 Mar 2017 16:15:54 +0000 (18:15 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 30 Mar 2017 16:15:54 +0000 (18:15 +0200)
Signed-off-by: Jody Bruchon <jody@jodybruchon.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/uniq.c

index be550b5cdbecd75bbdd52bcef3f1c8ea622688da..1c23e1d08be6f570ebce5a16e8f221607941cc0b 100644 (file)
@@ -54,12 +54,13 @@ int uniq_main(int argc UNUSED_PARAM, char **argv)
                OPT_f = 0x8,
                OPT_s = 0x10,
                OPT_w = 0x20,
+               OPT_i = 0x40,
        };
 
        skip_fields = skip_chars = 0;
        max_chars = INT_MAX;
 
-       opt = getopt32(argv, "cduf:+s:+w:+", &skip_fields, &skip_chars, &max_chars);
+       opt = getopt32(argv, "cduf:+s:+w:+i", &skip_fields, &skip_chars, &max_chars);
        argv += optind;
 
        input_filename = argv[0];
@@ -106,7 +107,12 @@ int uniq_main(int argc UNUSED_PARAM, char **argv)
                                ++cur_compare;
                        }
 
-                       if (!old_line || strncmp(old_compare, cur_compare, max_chars)) {
+                       if (!old_line)
+                               break;
+                       if ((opt & OPT_i)
+                               ? strncasecmp(old_compare, cur_compare, max_chars)
+                               : strncmp(old_compare, cur_compare, max_chars)
+                       ) {
                                break;
                        }