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