From d02327d0ebf564101421f8c1312b86a8b3c8ea48 Mon Sep 17 00:00:00 2001 From: FRIGN Date: Thu, 19 Feb 2015 19:27:17 +0100 Subject: [PATCH] Get rid of the %Z-flag in strptime-format We don't actually need it for Zulu-time and handroll it. We can add the gmt-offset to hour without range-checking, because the implementation will take care of it in mktime(). --- touch.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/touch.c b/touch.c index 8c488f1..dc76cfb 100644 --- a/touch.c +++ b/touch.c @@ -48,6 +48,7 @@ time_t parsetime(char *str, time_t current) { struct tm *cur, t; + int zulu = 0; char *format; size_t len = strlen(str); @@ -87,7 +88,9 @@ parsetime(char *str, time_t current) /* only Zulu-timezone supported */ if (str[19] != 'Z') eprintf("Invalid time zone\n"); - format = "%Y-%m-%dT%H:%M:%S%Z"; + str[19] = 0; + zulu = 1; + format = "%Y-%m-%dT%H:%M:%S"; break; default: eprintf("Invalid date format length\n", str); @@ -95,6 +98,11 @@ parsetime(char *str, time_t current) if (!strptime(str, format, &t)) weprintf("strptime %s: Invalid date format\n", str); + if (zulu) { + t.tm_hour += t.tm_gmtoff / 60; + t.tm_gmtoff = 0; + t.tm_zone = "Z"; + } return mktime(&t); }