date & touch: timegm/mktime checks

Theo Buehler <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
Another bunch of straightforward changes. The checks in touch don't make
that code prettier, though.

Index: bin/date/date.c
===================================================================
RCS file: /cvs/src/bin/date/date.c,v
diff -u -p -r1.60 date.c
--- bin/date/date.c	28 Apr 2024 16:43:15 -0000	1.60
+++ bin/date/date.c	21 Jun 2026 08:03:07 -0000
@@ -223,11 +223,12 @@ setthetime(char *p, const char *pformat)
 	}
 
 	/* convert broken-down time to UTC clock time */
+	lt->tm_wday = -1;
 	if (pformat != NULL && strstr(pformat, "%s") != NULL)
 		tval = timegm(lt);
 	else
 		tval = mktime(lt);
-	if (tval == -1)
+	if (tval == -1 && lt->tm_wday == -1)
 		errx(1, "specified date is outside allowed range");
 
 	if (jflag)
Index: usr.bin/touch/touch.c
===================================================================
RCS file: /cvs/src/usr.bin/touch/touch.c,v
diff -u -p -r1.27 touch.c
--- usr.bin/touch/touch.c	29 Jan 2022 00:06:26 -0000	1.27
+++ usr.bin/touch/touch.c	21 Jun 2026 08:06:55 -0000
@@ -223,8 +223,9 @@ stime_arg1(char *arg, struct timespec *t
 	}
 
 	lt->tm_isdst = -1;		/* Figure out DST. */
+	lt->tm_wday = -1;
 	tsp[0].tv_sec = tsp[1].tv_sec = mktime(lt);
-	if (tsp[0].tv_sec == -1)
+	if (tsp[0].tv_sec == -1 && lt->tm_wday == -1)
 terr:		errx(1,
 	"out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]");
 
@@ -264,8 +265,9 @@ stime_arg2(char *arg, int year, struct t
 	lt->tm_sec = 0;
 
 	lt->tm_isdst = -1;		/* Figure out DST. */
+	lt->tm_wday = -1;
 	tsp[0].tv_sec = tsp[1].tv_sec = mktime(lt);
-	if (tsp[0].tv_sec == -1)
+	if (tsp[0].tv_sec == -1 && lt->tm_wday == -1)
 terr:		errx(1,
 	"out of range or illegal time specification: MMDDhhmm[YY]");
 
@@ -323,8 +325,9 @@ stime_argd(char *arg, struct timespec *t
 		goto terr;
 
 	tm.tm_isdst = -1;
+	tm.tm_wday = -1;
 	tsp[0].tv_sec = utc ? timegm(&tm) : mktime(&tm);
-	if (tsp[0].tv_sec == -1)
+	if (tsp[0].tv_sec == -1 && tm.tm_wday == -1)
 terr:		errx(1,
   "out of range or illegal time specification: YYYY-MM-DDThh:mm:ss[.frac][Z]");
 	tsp[1] = tsp[0];
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.