touch: do not ignore argument of -d/-t option
authorMikhail Gusarov <dottedmag@dottedmag.net>
Sun, 21 Mar 2010 08:22:47 +0000 (14:22 +0600)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 21 Mar 2010 12:04:47 +0000 (13:04 +0100)
Previously -d/-t was no-op due to wrong handling of args passed to
utimes(2).

Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/touch.c

index 3f7b265..dceb7c1 100644 (file)
@@ -104,7 +104,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
        }
 
        do {
-               if (utimes(*argv, reference_file ? timebuf : NULL) != 0) {
+               if (utimes(*argv, (reference_file || date_str) ? timebuf : NULL) != 0) {
                        if (errno == ENOENT) { /* no such file */
                                if (opts) { /* creation is disabled, so ignore */
                                        continue;
@@ -113,7 +113,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
                                fd = open(*argv, O_RDWR | O_CREAT, 0666);
                                if (fd >= 0) {
                                        xclose(fd);
-                                       if (reference_file)
+                                       if (reference_file || date_str)
                                                utimes(*argv, timebuf);
                                        continue;
                                }