Module Name: src
Committed By: rin
Date: Sat Aug 6 10:16:18 UTC 2022
Modified Files:
src/sbin/dmesg: dmesg.c
Log Message:
Get back to the statically-allocated tbuf.
If a string is longer than tbuf, it cannot be a timestamp.
Therefore, no need for buffering anymore in this case.
To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sbin/dmesg/dmesg.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/dmesg/dmesg.c
diff -u src/sbin/dmesg/dmesg.c:1.48 src/sbin/dmesg/dmesg.c:1.49
--- src/sbin/dmesg/dmesg.c:1.48 Sat Aug 6 09:42:33 2022
+++ src/sbin/dmesg/dmesg.c Sat Aug 6 10:16:18 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: dmesg.c,v 1.48 2022/08/06 09:42:33 rin Exp $ */
+/* $NetBSD: dmesg.c,v 1.49 2022/08/06 10:16:18 rin Exp $ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -38,7 +38,7 @@ __COPYRIGHT("@(#) Copyright (c) 1991, 19
#if 0
static char sccsid[] = "@(#)dmesg.c 8.1 (Berkeley) 6/5/93";
#else
-__RCSID("$NetBSD: dmesg.c,v 1.48 2022/08/06 09:42:33 rin Exp $");
+__RCSID("$NetBSD: dmesg.c,v 1.49 2022/08/06 10:16:18 rin Exp $");
#endif
#endif /* not lint */
@@ -149,8 +149,7 @@ main(int argc, char *argv[])
char *p, *bufdata;
char buf[5];
#ifndef SMALL
- size_t tbuflen;
- char *tbuf;
+ char tbuf[64];
char *memf, *nlistf;
struct timespec boottime;
struct timespec lasttime;
@@ -265,11 +264,6 @@ main(int argc, char *argv[])
frac = false;
postts = false;
scale = 0;
-
- tbuflen = 64;
- tbuf = malloc(tbuflen);
- if (tbuf == NULL)
- err(1, "malloc");
#endif
for (tstamp = 0, newl = 1, log = i = 0, p = bufdata + cur.msg_bufx;
i < cur.msg_bufs; i++, p++) {
@@ -279,11 +273,14 @@ main(int argc, char *argv[])
p = bufdata;
#define ADDC(c) \
do { \
- if (tstamp >= tbuflen - 1 && \
- reallocarr(&tbuf, tbuflen * 2, 1) == 0) \
- tbuflen *= 2; \
- if (tstamp < tbuflen - 1) \
+ if (tstamp < sizeof(tbuf) - 1) \
tbuf[tstamp++] = (c); \
+ else { \
+ /* Cannot be a timestamp. */ \
+ tstamp = 0; \
+ tbuf[sizeof(tbuf) - 1] = '\0'; \
+ goto not_tstamp; \
+ } \
if (frac) \
scale++; \
} while (0)
@@ -322,6 +319,8 @@ main(int argc, char *argv[])
continue;
#ifndef SMALL
case ']':
+ if (tstamp == 0)
+ goto prchar;
frac = false;
ADDC(ch);
ADDC('\0');
@@ -330,7 +329,7 @@ main(int argc, char *argv[])
sec = fsec = 0;
switch (sscanf(tbuf, "[%jd.%ld]", &sec, &fsec)){
case 0:
- /* not a timestamp */
+ not_tstamp: /* not a timestamp */
PRTBUF();
continue;
case 1:
@@ -361,14 +360,14 @@ main(int argc, char *argv[])
t++;
if (localtime_r(&t, &tm) != NULL) {
- strftime(tbuf, tbuflen,
+ strftime(tbuf, sizeof(tbuf),
"%a %b %e %H:%M:%S %Z %Y",
&tm);
printf("%s", tbuf);
}
} else if (humantime > 1) {
const char *fp = fmtydhmsf(tbuf,
- tbuflen, sec, fsec, humantime);
+ sizeof(tbuf), sec, fsec, humantime);
if (fp) {
printf("%s", fp);
}
@@ -410,6 +409,7 @@ main(int argc, char *argv[])
frac = true;
continue;
}
+ prchar:
#endif
if (log)
continue;