Module Name:    src
Committed By:   isaki
Date:           Fri Feb  8 08:55:35 UTC 2019

Modified Files:
        src/usr.sbin/memswitch: Makefile memswitch.c

Log Message:
Rewrite modify_single() to make compilable on gcc7.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/memswitch/Makefile
cvs rdiff -u -r1.16 -r1.17 src/usr.sbin/memswitch/memswitch.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.sbin/memswitch/Makefile
diff -u src/usr.sbin/memswitch/Makefile:1.2 src/usr.sbin/memswitch/Makefile:1.3
--- src/usr.sbin/memswitch/Makefile:1.2	Thu Feb  7 06:01:04 2019
+++ src/usr.sbin/memswitch/Makefile	Fri Feb  8 08:55:35 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.2 2019/02/07 06:01:04 mrg Exp $
+#	$NetBSD: Makefile,v 1.3 2019/02/08 08:55:35 isaki Exp $
 
 .if ${MACHINE} == "x68k"
 PROG=	memswitch
@@ -8,11 +8,4 @@ SRCS=	memswitch.c properties.c methods.c
 MAN=	memswitch.8
 MANSUBDIR=	/x68k
 
-.include <bsd.own.mk>
-
-# XXX Not sure how to fix this problem
-.if defined(HAVE_GCC) && ${HAVE_GCC} == 7 && ${ACTIVE_CC} == "gcc"
-COPTS.memswitch.c+=	-Wno-error=stringop-overflow
-.endif
-
 .include <bsd.prog.mk>

Index: src/usr.sbin/memswitch/memswitch.c
diff -u src/usr.sbin/memswitch/memswitch.c:1.16 src/usr.sbin/memswitch/memswitch.c:1.17
--- src/usr.sbin/memswitch/memswitch.c:1.16	Fri Feb  8 08:41:11 2019
+++ src/usr.sbin/memswitch/memswitch.c	Fri Feb  8 08:55:35 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: memswitch.c,v 1.16 2019/02/08 08:41:11 isaki Exp $	*/
+/*	$NetBSD: memswitch.c,v 1.17 2019/02/08 08:55:35 isaki Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -196,41 +196,37 @@ show_all(void)
 void
 modify_single(const char *expr)
 {
-	int i, l, n;
-	char *class = NULL, *node = NULL;
+	int i;
+	char *buf;
+	char *p;
+	const char *class;
+	const char *node;
 	const char *value;
 	char valuestr[MAXVALUELEN];
 
-	l = 0;
-	n = strlen(expr);
-	for (i = 0; i < n; i++) {
-		if (expr[i] == '.') {
-			l = i + 1;
-			class = alloca(l);
-			if (class == 0)
-				err(1, "alloca");
-			strncpy(class, expr, i);
-			class[i] = 0;
+	buf = strdup(expr);
+	if (buf == NULL)
+		err(EXIT_FAILURE, "strdup failed");
+
+	p = buf;
+	for (class = p; *p; p++) {
+		if (*p == '.') {
+			*p++ = '\0';
 			break;
 		}
 	}
-	if (i >= n)
-		errx(1, "Invalid expression: %s", expr);
 
-	for ( ; i < n; i++) {
-		if (expr[i] == '=') {
-			node = alloca(i - l + 1);
-			if (node == 0)
-				err(1, "alloca");
-			strncpy(node, &(expr[l]), i - l);
-			node[i - l] = 0;
+	for (node = p; *p; p++) {
+		if (*p == '=') {
+			*p++ = '\0';
 			break;
 		}
 	}
-	if (i >= n)
-		errx(1, "Invalid expression: %s", expr);
 
-	value = &(expr[++i]);
+	value = p;
+
+	if (class[0] == '\0' || node[0] == '\0' || value[0] == '\0')
+		errx(1, "Invalid expression: %s", expr);
 
 	for (i = 0; i < number_of_props; i++) {
 		if (strcmp(properties[i].class, class) == 0 &&
@@ -248,7 +244,7 @@ modify_single(const char *expr)
 		errx(1, "No such property: %s.%s", class, node);
 	}
 
-	return;
+	free(buf);
 }
 
 void

Reply via email to