Module Name:    src
Committed By:   rillig
Date:           Mon Jul 10 14:13:19 UTC 2023

Modified Files:
        src/usr.bin/xlint/lint2: chk.c msg.c read.c

Log Message:
lint: push memory management one layer down

Just as with type_name in lint1, it is more convenient if the
application code does not have to deal with memory management.


To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 src/usr.bin/xlint/lint2/chk.c
cvs rdiff -u -r1.22 -r1.23 src/usr.bin/xlint/lint2/msg.c
cvs rdiff -u -r1.85 -r1.86 src/usr.bin/xlint/lint2/read.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/xlint/lint2/chk.c
diff -u src/usr.bin/xlint/lint2/chk.c:1.58 src/usr.bin/xlint/lint2/chk.c:1.59
--- src/usr.bin/xlint/lint2/chk.c:1.58	Mon Jul 10 12:40:22 2023
+++ src/usr.bin/xlint/lint2/chk.c	Mon Jul 10 14:13:19 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: chk.c,v 1.58 2023/07/10 12:40:22 rillig Exp $ */
+/* $NetBSD: chk.c,v 1.59 2023/07/10 14:13:19 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: chk.c,v 1.58 2023/07/10 12:40:22 rillig Exp $");
+__RCSID("$NetBSD: chk.c,v 1.59 2023/07/10 14:13:19 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -198,7 +198,6 @@ static void
 check_multiple_definitions(const hte_t *hte)
 {
 	sym_t *sym, *def1;
-	char *pos1;
 
 	if (!hte->h_def)
 		return;
@@ -217,10 +216,8 @@ check_multiple_definitions(const hte_t *
 			def1 = sym;
 			continue;
 		}
-		pos1 = xstrdup(mkpos(&def1->s_pos));
 		/* %s multiply defined  \t%s  ::  %s */
-		msg(3, hte->h_name, pos1, mkpos(&sym->s_pos));
-		free(pos1);
+		msg(3, hte->h_name, mkpos(&def1->s_pos), mkpos(&sym->s_pos));
 	}
 }
 
@@ -237,7 +234,6 @@ static void
 chkvtui(const hte_t *hte, sym_t *def, sym_t *decl)
 {
 	fcall_t *call;
-	char *pos1;
 	type_t *tp1, *tp2;
 	bool dowarn, eq;
 	tspec_t t1;
@@ -273,19 +269,16 @@ chkvtui(const hte_t *hte, sym_t *def, sy
 				 * behavior matches pcc-based lint, so it is
 				 * accepted for now.
 				 */
-				pos1 = xstrdup(mkpos(&def->s_pos));
 				/* %s function value must be declared ... */
 				msg(17, hte->h_name,
-				    pos1, mkpos(&call->f_pos));
-				free(pos1);
+				    mkpos(&def->s_pos), mkpos(&call->f_pos));
 			}
 			continue;
 		}
 		if (!eq || (sflag && dowarn)) {
-			pos1 = xstrdup(mkpos(&def->s_pos));
 			/* %s value used inconsistently  \t%s  ::  %s */
-			msg(4, hte->h_name, pos1, mkpos(&call->f_pos));
-			free(pos1);
+			msg(4, hte->h_name,
+			    mkpos(&def->s_pos), mkpos(&call->f_pos));
 		}
 	}
 }
@@ -301,7 +294,6 @@ chkvtdi(const hte_t *hte, sym_t *def, sy
 	sym_t *sym;
 	type_t *tp1, *tp2;
 	bool eq, dowarn;
-	char *pos1;
 
 	if (def == NULL)
 		def = decl;
@@ -323,11 +315,9 @@ chkvtdi(const hte_t *hte, sym_t *def, sy
 			    false, false, false, &dowarn);
 		}
 		if (!eq || (sflag && dowarn)) {
-			pos1 = xstrdup(mkpos(&def->s_pos));
 			/* %s value declared inconsistently (%s != %s) \t... */
 			msg(5, hte->h_name, type_name(xt1), type_name(xt2),
-			    pos1, mkpos(&sym->s_pos));
-			free(pos1);
+			    mkpos(&def->s_pos), mkpos(&sym->s_pos));
 		}
 	}
 }
@@ -344,7 +334,6 @@ chkfaui(const hte_t *hte, sym_t *def, sy
 	pos_t *pos1p = NULL;
 	fcall_t *calls, *call, *call1;
 	int n, as;
-	char *pos1;
 	arginf_t *ai;
 
 	if ((calls = hte->h_calls) == NULL)
@@ -408,10 +397,8 @@ chkfaui(const hte_t *hte, sym_t *def, sy
 			 * in the prototype.
 			 */
 		} else {
-			pos1 = xstrdup(mkpos(pos1p));
 			/* %s: variable # of args  \t%s  ::  %s */
-			msg(7, hte->h_name, pos1, mkpos(&call->f_pos));
-			free(pos1);
+			msg(7, hte->h_name, mkpos(pos1p), mkpos(&call->f_pos));
 			continue;
 		}
 
@@ -456,7 +443,6 @@ chkau(const hte_t *hte, int n, sym_t *de
 	bool promote, asgn, dowarn;
 	tspec_t t1, t2;
 	arginf_t *ai, *ai1;
-	char *pos1;
 
 	/*
 	 * If a function definition is available (def != NULL), we compare the
@@ -593,11 +579,9 @@ chkau(const hte_t *hte, int n, sym_t *de
 			return;
 	}
 
-	pos1 = xstrdup(mkpos(pos1p));
 	/* %s, arg %d used inconsistently  \t%s[%s]  ::  %s[%s] */
-	msg(6, hte->h_name, n, pos1, type_name(arg1),
+	msg(6, hte->h_name, n, mkpos(pos1p), type_name(arg1),
 	    mkpos(&call->f_pos), type_name(arg2));
-	free(pos1);
 }
 
 /*
@@ -1131,8 +1115,6 @@ check_argument_declarations(const hte_t 
 	int n;
 	sym_t *sym1, *sym;
 	type_t **ap1, **ap2, *tp1, *tp2;
-	char *pos1;
-	const char *pos2;
 
 	osdef = false;
 	if (def != NULL) {
@@ -1163,12 +1145,10 @@ check_argument_declarations(const hte_t 
 			eq = types_compatible(xt1 = *ap1, xt2 = *ap2,
 			    true, osdef, false, &dowarn);
 			if (!eq || dowarn) {
-				pos1 = xstrdup(mkpos(&sym1->s_pos));
-				pos2 = mkpos(&sym->s_pos);
 				/* %s, arg %d declared inconsistently ... */
 				msg(11, hte->h_name, n + 1,
-				    type_name(xt1), type_name(xt2), pos1, pos2);
-				free(pos1);
+				    type_name(xt1), type_name(xt2),
+				    mkpos(&sym1->s_pos), mkpos(&sym->s_pos));
 			}
 			n++;
 			ap1++;
@@ -1184,10 +1164,8 @@ check_argument_declarations(const hte_t 
 				continue;
 			}
 		}
-		pos1 = xstrdup(mkpos(&sym1->s_pos));
 		/* %s: variable # of args declared  \t%s  ::  %s */
-		msg(12, hte->h_name, pos1, mkpos(&sym->s_pos));
-		free(pos1);
+		msg(12, hte->h_name, mkpos(&sym1->s_pos), mkpos(&sym->s_pos));
 	}
 }
 

Index: src/usr.bin/xlint/lint2/msg.c
diff -u src/usr.bin/xlint/lint2/msg.c:1.22 src/usr.bin/xlint/lint2/msg.c:1.23
--- src/usr.bin/xlint/lint2/msg.c:1.22	Mon Jul 10 13:55:55 2023
+++ src/usr.bin/xlint/lint2/msg.c	Mon Jul 10 14:13:19 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.c,v 1.22 2023/07/10 13:55:55 rillig Exp $	*/
+/*	$NetBSD: msg.c,v 1.23 2023/07/10 14:13:19 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: msg.c,v 1.22 2023/07/10 13:55:55 rillig Exp $");
+__RCSID("$NetBSD: msg.c,v 1.23 2023/07/10 14:13:19 rillig Exp $");
 #endif
 
 #include <stdarg.h>
@@ -104,8 +104,14 @@ lbasename(const char *path)
 const char *
 mkpos(const pos_t *posp)
 {
-	static char *buf;
-	static size_t buf_size;
+	static struct buffer {
+		char *buf;
+		size_t cap;
+	} buffers[2];
+	static unsigned int buf_index;
+
+	struct buffer *buf = buffers + buf_index;
+	buf_index ^= 1;
 
 	int filename;
 	int lineno;
@@ -121,13 +127,13 @@ mkpos(const pos_t *posp)
 	const char *fn = lbasename(fnames[filename]);
 	size_t len = strlen(fn) + 1 + 1 + 3 * sizeof(int) + 1 + 1;
 
-	if (len > buf_size)
-		buf = xrealloc(buf, buf_size = len);
+	if (len > buf->cap)
+		buf->buf = xrealloc(buf->buf, buf->cap = len);
 	if (lineno != 0)
-		(void)snprintf(buf, buf_size, "%s%s(%d)",
+		(void)snprintf(buf->buf, buf->cap, "%s%s(%d)",
 		    fn, qm ? "?" : "", lineno);
 	else
-		(void)snprintf(buf, buf_size, "%s", fn);
+		(void)snprintf(buf->buf, buf->cap, "%s", fn);
 
-	return buf;
+	return buf->buf;
 }

Index: src/usr.bin/xlint/lint2/read.c
diff -u src/usr.bin/xlint/lint2/read.c:1.85 src/usr.bin/xlint/lint2/read.c:1.86
--- src/usr.bin/xlint/lint2/read.c:1.85	Mon Jul 10 12:40:22 2023
+++ src/usr.bin/xlint/lint2/read.c	Mon Jul 10 14:13:19 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: read.c,v 1.85 2023/07/10 12:40:22 rillig Exp $ */
+/* $NetBSD: read.c,v 1.86 2023/07/10 14:13:19 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: read.c,v 1.85 2023/07/10 12:40:22 rillig Exp $");
+__RCSID("$NetBSD: read.c,v 1.86 2023/07/10 14:13:19 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -467,7 +467,7 @@ static void
 decldef(pos_t pos, const char *cp)
 {
 	sym_t *symp, sym;
-	char *pos1, *tname;
+	char *tname;
 	bool used, renamed;
 	hte_t *hte, *renamehte = NULL;
 	const char *name, *newname;
@@ -497,10 +497,9 @@ decldef(pos_t pos, const char *cp)
 			renamed = true;
 		} else if (hte = renamehte->h_hte,
 		    strcmp(hte->h_name, newname) != 0) {
-			pos1 = xstrdup(mkpos(&renamehte->h_syms->s_pos));
 			/* %s renamed multiple times  \t%s  ::  %s */
-			msg(18, tname, pos1, mkpos(&sym.s_pos));
-			free(pos1);
+			msg(18, tname, mkpos(&renamehte->h_syms->s_pos),
+			    mkpos(&sym.s_pos));
 		}
 		free(tname);
 	} else {

Reply via email to