diff options
| author | Warner Losh <imp@FreeBSD.org> | 2024-11-30 04:48:35 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2024-11-30 04:48:35 +0000 |
| commit | 45af733dbd17548ea0051a665f50143aadd3b2a6 (patch) | |
| tree | ae9f6d53d1b2eabfc1ef3394182e4dc764b2d6e3 | |
| parent | 381c116afc1f4a775483a1b1a864488d37cc4b8a (diff) | |
awk: Update to 20240728 bsd-feature 3319c34a8713 (add mktime)vendor/one-true-awk/3319c34a8713
Jul 28, 2024
Fixed readcsvrec resize segfault when reading csv records longer
than 8k. Thanks to Ozan Yigit.
mktime() added to bsd-features branch. Thanks to Todd Miller.
| -rw-r--r-- | FIXES | 5 | ||||
| -rw-r--r-- | awk.h | 1 | ||||
| -rw-r--r-- | b.c | 2 | ||||
| -rw-r--r-- | lex.c | 1 | ||||
| -rw-r--r-- | lib.c | 2 | ||||
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | run.c | 22 |
7 files changed, 31 insertions, 4 deletions
@@ -25,6 +25,11 @@ THIS SOFTWARE. This file lists all bug fixes, changes, etc., made since the second edition of the AWK book was published in September 2023. +Jul 28, 2024 + Fixed readcsvrec resize segfault when reading csv records longer + than 8k. Thanks to Ozan Yigit. + mktime() added to bsd-features branch. Thanks to Todd Miller. + Jun 23, 2024 Fix signal for system-status test. Thanks to Tim van der Molen. Rewrite if-else chain as switch. Thanks to Andrew Sukach. @@ -162,6 +162,7 @@ extern Cell *symtabloc; /* SYMTAB */ #define FRSHIFT 20 #define FSYSTIME 21 #define FSTRFTIME 22 +#define FMKTIME 23 /* Node: parse tree is made of nodes, with Cell's at bottom */ @@ -616,7 +616,7 @@ static void resize_gototab(fa *f, int state) if (p == NULL) overflo(__func__); - // need to initialized the new memory to zero + // need to initialize the new memory to zero size_t orig_size = f->gototab[state].allocated; // 2nd half of new mem is this size memset(p + orig_size, 0, orig_size * sizeof(gtte)); // clean it out @@ -74,6 +74,7 @@ const Keyword keywords[] = { /* keep sorted: binary searched */ { "log", FLOG, BLTIN }, { "lshift", FLSHIFT, BLTIN }, { "match", MATCHFCN, MATCHFCN }, + { "mktime", FMKTIME, BLTIN }, { "next", NEXT, NEXT }, { "nextfile", NEXTFILE, NEXTFILE }, { "or", FFOR, BLTIN }, @@ -231,7 +231,7 @@ int readrec(char **pbuf, int *pbufsize, FILE *inf, bool newflag) /* read one rec char *rs = getsval(rsloc); if (CSV) { - c = readcsvrec(pbuf, pbufsize, inf, newflag); + c = readcsvrec(&buf, &bufsize, inf, newflag); isrec = (c == EOF && rr == buf) ? false : true; } else if (*rs && rs[1]) { bool found; @@ -22,7 +22,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ****************************************************************/ -const char *version = "version 20240623"; +const char *version = "version 20240728"; #define DEBUG #include <stdio.h> @@ -2069,7 +2069,7 @@ Cell *bltin(Node **a, int n) /* builtin functions. a[0] is type, a[1] is arg lis FILE *fp; int status = 0; time_t tv; - struct tm *tm; + struct tm *tm, tmbuf; int estatus = 0; t = ptoi(a[0]); @@ -2223,6 +2223,26 @@ Cell *bltin(Node **a, int n) /* builtin functions. a[0] is type, a[1] is arg lis 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); break; |
