Module Name:    src
Committed By:   rillig
Date:           Sun Aug  9 07:03:06 UTC 2020

Modified Files:
        src/usr.bin/make: enum.h var.c

Log Message:
make(1): use fixed-size arrays for Enum_ToString

Declaring the ToStringSize as "static const size_t" made it an ordinary
integer expression.  To avoid variable length arrays, the commonly
accepted way is to declare the length as an enum constant, as that is
considered an integer constant expression, which in turn makes the
declaration a fixed-size array.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/enum.h
cvs rdiff -u -r1.435 -r1.436 src/usr.bin/make/var.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/make/enum.h
diff -u src/usr.bin/make/enum.h:1.3 src/usr.bin/make/enum.h:1.4
--- src/usr.bin/make/enum.h:1.3	Sun Aug  9 02:53:21 2020
+++ src/usr.bin/make/enum.h	Sun Aug  9 07:03:06 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: enum.h,v 1.3 2020/08/09 02:53:21 christos Exp $	*/
+/*	$NetBSD: enum.h,v 1.4 2020/08/09 07:03:06 rillig Exp $	*/
 
 /*
  Copyright (c) 2020 Roland Illig <[email protected]>
@@ -59,10 +59,8 @@ const char *Enum_ToString(char *, size_t
 	#v1 ENUM__SEP ENUM__JOIN_6(v2, v3, v4, v5, v6, v7)
 
 #define ENUM__RTTI(typnam, specs, joined) \
-	static const EnumToStringSpec typnam ## _ ## ToStringSpecs[] = specs; 
-#if 0
-	static const size_t typnam ## _ ## ToStringSize = sizeof joined
-#endif
+	static const EnumToStringSpec typnam ## _ ## ToStringSpecs[] = specs; \
+	enum { typnam ## _ ## ToStringSize = sizeof joined }
 
 #define ENUM__SPEC(v) { v, #v }
 

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.435 src/usr.bin/make/var.c:1.436
--- src/usr.bin/make/var.c:1.435	Sun Aug  9 02:53:21 2020
+++ src/usr.bin/make/var.c	Sun Aug  9 07:03:06 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.435 2020/08/09 02:53:21 christos Exp $	*/
+/*	$NetBSD: var.c,v 1.436 2020/08/09 07:03:06 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.435 2020/08/09 02:53:21 christos Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.436 2020/08/09 07:03:06 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)var.c	8.3 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: var.c,v 1.435 2020/08/09 02:53:21 christos Exp $");
+__RCSID("$NetBSD: var.c,v 1.436 2020/08/09 07:03:06 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -3064,8 +3064,8 @@ ApplyModifiers(
 	mod = p;
 
 	if (DEBUG(VAR)) {
-	    char vflags_str[2048];
-	    char eflags_str[2048];
+	    char eflags_str[VarEvalFlags_ToStringSize];
+	    char vflags_str[VarFlags_ToStringSize];
 	    Boolean is_single_char = mod[0] != '\0' &&
 	        (mod[1] == endc || mod[1] == ':');
 
@@ -3211,8 +3211,8 @@ ApplyModifiers(
 	    goto bad_modifier;
 
 	if (DEBUG(VAR)) {
-	    char eflags_str[2048];
-	    char vflags_str[2048];
+	    char eflags_str[VarEvalFlags_ToStringSize];
+	    char vflags_str[VarFlags_ToStringSize];
 	    const char *q = st.newVal == var_Error ? "" : "\"";
 	    const char *newVal = st.newVal == var_Error ? "error" : st.newVal;
 
@@ -3348,7 +3348,7 @@ Var_Parse(const char * const str, GNode 
     const char *extramodifiers;
     Var *v;
     char *nstr;
-    char eflags_str[2048];
+    char eflags_str[VarEvalFlags_ToStringSize];
 
     VAR_DEBUG("%s: %s with %s\n", __func__, str,
 	      Enum_ToString(eflags_str, sizeof eflags_str, eflags,

Reply via email to