aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2016-10-19 20:51:28 -0500
committerRob Landley <rob@landley.net>2016-10-19 20:51:28 -0500
commit354ff6831412eb88c64e9f497a382d926dc7b9bd (patch)
treeafd03ab495e50e08bb0ea06b7ea7d41b8b2cee34
parentee14fc396dff50a263b62670f5484efcd6316aeb (diff)
downloadtoybox-354ff6831412eb88c64e9f497a382d926dc7b9bd.tar.gz
More touch tests, and a fix found by one. (The three -t formats can only
reliably be distinguished by checking length, because %H amd %m and such can match different numbers of digits.)
-rwxr-xr-xtests/touch.test22
-rw-r--r--toys/posix/touch.c9
2 files changed, 30 insertions, 1 deletions
diff --git a/tests/touch.test b/tests/touch.test
index d5bef815..1b71c5eb 100755
--- a/tests/touch.test
+++ b/tests/touch.test
@@ -15,6 +15,19 @@ testing "-t" \
"touch -t 201201231234 walrus && date -r walrus +%Y%m%d-%H%M%S.%N" \
"20120123-123400.000000000\n" "" ""
+# Yes, the year could roll over while you're running this test. I do not care.
+testing "-t MMDDhhmm" \
+ "touch -t 01231234 input && date +%Y-%m-%d:%H-%M-%S -r input" \
+ "$(date +%Y)-01-23:12-34-00\n" "" ""
+
+testing "-t YYMMDDhhmm" \
+ "touch -t 2101231234 input && date +%Y-%m-%d:%H-%M-%S -r input" \
+ "$(date +%C)21-01-23:12-34-00\n" "" ""
+
+testing "-t CCYYMMDDhhmm" \
+ "touch -t 201201231234 walrus && date -r walrus +%Y%m%d-%H%M%S.%N" \
+ "20120123-123400.000000000\n" "" ""
+
testing "-t seconds" \
"touch -t 201201231234.56 walrus && date -r walrus +%Y%m%d-%H%M%S.%N" \
"20120123-123456.000000000\n" "" ""
@@ -27,6 +40,10 @@ testing "-d" \
"touch -d 2009-02-13T23:31:30Z walrus && date -r walrus +%s" \
"1234567890\n" "" ""
+testing "-d with space" \
+ "touch -d '2009-02-13 23:31:30Z' walrus && date -r walrus +%s" \
+ "1234567890\n" "" ""
+
testing "-d nanoseconds" \
"touch -d 2009-02-13T23:31:30.123456789Z walrus && date -r walrus +%s.%N" \
"1234567890.123456789\n" "" ""
@@ -40,6 +57,11 @@ testing "-t MMDDhhmm" \
"touch -t 01231234 input && date +%Y-%m-%d:%H-%M-%S -r input" \
"$(date +%Y)-01-23:12-34-00\n" "" ""
+testing "-t CCMMDDhhmm" \
+ "touch -t 2101231234 input && date +%Y-%m-%d:%H-%M-%S -r input" \
+ "$(date +%C)21-01-23:12-34-00\n" "" ""
+
+
#testing "-a"
#testing "-m"
#testing "-am"
diff --git a/toys/posix/touch.c b/toys/posix/touch.c
index 79928cee..c18087a9 100644
--- a/toys/posix/touch.c
+++ b/toys/posix/touch.c
@@ -54,7 +54,7 @@ void touch_main(void)
format = (char *[]){"%Y-%m-%dT%T", "%Y-%m-%d %T", 0};
date = TT.date;
} else {
- format = (char *[]){"%Y%m%d%H%M", "%m%d%H%M", "%y%m%d%H%M", 0};
+ format = (char *[]){"%m%d%H%M", "%y%m%d%H%M", "%C%y%m%d%H%M", 0};
date = TT.time;
}
@@ -66,6 +66,13 @@ void touch_main(void)
}
while (*format) {
+ if (toys.optflags&FLAG_t) {
+ s = strchr(date, '.');
+ if ((s ? s-date : strlen(date)) != strlen(*format)) {
+ format++;
+ continue;
+ }
+ }
localtime_r(&(ts->tv_sec), &tm);
// Adjusting for daylight savings time gives the wrong answer.
tm.tm_isdst = 0;