diff: correct handling of labels. -10 bytes
authorMatheus Izvekov <mizvekov@gmail.com>
Mon, 18 Jan 2010 22:40:23 +0000 (20:40 -0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 20 Jan 2010 01:45:45 +0000 (02:45 +0100)
>>From 05eeb173f0431b4fbed7684d7a9cea42f747f63e Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov@gmail.com>
Date: Mon, 18 Jan 2010 20:33:55 -0200
Subject: [PATCH] diff: correct handling of labels

This fixes an issue where diff would apply labels to files in the
inverse order, when using -L or --label.
This fixes it in order to be compatible with gnu diff.
It also makes it not an error to specify more than one label.
The behavior for such cases is that they override the label for the new
file.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/diff.c

index 9d0373f9350777f6c018195e10ab0d25613bd4f9..7429b411aae6c7a14fa3c2012eb18d4c9222041b 100644 (file)
@@ -915,13 +915,8 @@ int diff_main(int argc UNUSED_PARAM, char **argv)
        getopt32(argv, "abdiL:NqrsS:tTU:wupBE",
                        &L_arg, &s_start, &opt_U_context);
        argv += optind;
-       while (L_arg) {
-               if (label[0] && label[1])
-                       bb_show_usage();
-               if (label[0]) /* then label[1] is NULL */
-                       label[1] = label[0];
-               label[0] = llist_pop(&L_arg);
-       }
+       while (L_arg)
+               label[!!label[0]] = llist_pop(&L_arg);
        xfunc_error_retval = 2;
        for (int i = 0; i < 2; i++) {
                file[i] = argv[i];