=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/awk/run.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -r1.67 -r1.68 --- src/usr.bin/awk/run.c 2020/08/11 16:57:05 1.67 +++ src/usr.bin/awk/run.c 2020/08/28 16:29:16 1.68 @@ -1,4 +1,4 @@ -/* $OpenBSD: run.c,v 1.67 2020/08/11 16:57:05 millert Exp $ */ +/* $OpenBSD: run.c,v 1.68 2020/08/28 16:29:16 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -1594,7 +1594,7 @@ FILE *fp; int status = 0; time_t tv; - struct tm *tm; + struct tm *tm, tmbuf; t = ptoi(a[0]); x = execute(a[1]); @@ -1748,6 +1748,26 @@ u = EOF; else u = fflush(fp); + break; + case FMKTIME: + memset(&tmbuf, 0, sizeof(tmbuf)); + tm = &tmbuf; + t = sscanf(getsval(x), "%d %d %d %d %d %d %d", + &tm->tm_year, &tm->tm_mon, &tm->tm_mday, &tm->tm_hour, + &tm->tm_min, &tm->tm_sec, &tm->tm_isdst); + switch (t) { + case 6: + tm->tm_isdst = -1; /* let mktime figure it out */ + /* FALLTHROUGH */ + case 7: + tm->tm_year -= 1900; + tm->tm_mon--; + u = mktime(tm); + break; + default: + u = -1; + break; + } break; case FSYSTIME: u = time((time_t *) 0);