summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coreutils/touch.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/coreutils/touch.c b/coreutils/touch.c
index 6c02013..4c7362a 100644
--- a/coreutils/touch.c
+++ b/coreutils/touch.c
@@ -153,11 +153,14 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
timebuf[1].tv_sec = timebuf[0].tv_sec = t;
timebuf[1].tv_nsec = timebuf[0].tv_nsec = 0;
}
- if (opts & OPT_a) {
- timebuf[1].tv_nsec = UTIME_OMIT;
- }
- if (opts & OPT_m) {
- timebuf[0].tv_nsec = UTIME_OMIT;
+ /* If both -a and -m specified, both times should be set.
+ * IOW: set OMIT only if one, not both, of them is given!
+ */
+ if ((opts & (OPT_a|OPT_m)) != (OPT_a|OPT_m)) {
+ if (opts & OPT_a)
+ timebuf[1].tv_nsec = UTIME_OMIT;
+ if (opts & OPT_m)
+ timebuf[0].tv_nsec = UTIME_OMIT;
}
argv += optind;