Module Name:    src
Committed By:   mrg
Date:           Sun Oct  6 00:05:10 UTC 2019

Modified Files:
        src/usr.sbin/sysinst: Makefile.inc partman.c

Log Message:
avoid calling snprintf/strlcat with an input parameter the same
as the output.  from martin@.  fixes gcc 8 restrict warnings.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/usr.sbin/sysinst/Makefile.inc
cvs rdiff -u -r1.42 -r1.43 src/usr.sbin/sysinst/partman.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/sysinst/Makefile.inc
diff -u src/usr.sbin/sysinst/Makefile.inc:1.24 src/usr.sbin/sysinst/Makefile.inc:1.25
--- src/usr.sbin/sysinst/Makefile.inc:1.24	Fri Oct  4 09:47:28 2019
+++ src/usr.sbin/sysinst/Makefile.inc	Sun Oct  6 00:05:10 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.24 2019/10/04 09:47:28 mrg Exp $
+#	$NetBSD: Makefile.inc,v 1.25 2019/10/06 00:05:10 mrg Exp $
 #
 # Makefile for sysinst
 
@@ -127,7 +127,7 @@ COPTS+=-Wno-format-truncation
 .endif
 
 # XXX overlapping strncpy/snprintf buffers!
-COPTS.partman.c+=	${${ACTIVE_CC} == "gcc" && ${HAVE_GCC:U0} == 8:? -Wno-error :}
+#COPTS.partman.c+=	${${ACTIVE_CC} == "gcc" && ${HAVE_GCC:U0} == 8:? -Wno-error :}
 
 # Host to ftp from.  Default:
 #	"ftp.NetBSD.org"

Index: src/usr.sbin/sysinst/partman.c
diff -u src/usr.sbin/sysinst/partman.c:1.42 src/usr.sbin/sysinst/partman.c:1.43
--- src/usr.sbin/sysinst/partman.c:1.42	Tue Aug 13 17:57:49 2019
+++ src/usr.sbin/sysinst/partman.c	Sun Oct  6 00:05:10 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: partman.c,v 1.42 2019/08/13 17:57:49 martin Exp $ */
+/*	$NetBSD: partman.c,v 1.43 2019/10/06 00:05:10 mrg Exp $ */
 
 /*
  * Copyright 2012 Eugene Lozovoy
@@ -950,7 +950,8 @@ pm_vnd_edit_menufmt(menudesc *m, int opt
 			break;
 		case PMV_MENU_NSECTORS:
 			if (dev_ptr->manual_geom && !dev_ptr->is_exist)
-				snprintf(buf, SSTRSIZE, "%d", dev_ptr->nsectors);
+				snprintf(buf, SSTRSIZE, "%d",
+				    dev_ptr->nsectors);
 			wprintw(m->mw, "%*s %s", -lcol_width,
 			    msg_string(MSG_vnd_spt_fmt), buf);
 			break;
@@ -962,7 +963,8 @@ pm_vnd_edit_menufmt(menudesc *m, int opt
 			break;
 		case PMV_MENU_NCYLINDERS:
 			if (dev_ptr->manual_geom && !dev_ptr->is_exist)
-				snprintf(buf, SSTRSIZE, "%d", dev_ptr->ncylinders);
+				snprintf(buf, SSTRSIZE, "%d",
+				    dev_ptr->ncylinders);
 			wprintw(m->mw, "%*s %s", -lcol_width,
 			    msg_string(MSG_vnd_cyl_fmt), buf);
 			break;
@@ -983,10 +985,13 @@ pm_vnd_set_value(menudesc *m, void *arg)
 			    dev_ptr->filepath, dev_ptr->filepath, STRSIZE);
 			if (dev_ptr->filepath[0] != '/') {
 				strlcpy(buf, dev_ptr->filepath, MOUNTLEN);
-				snprintf(dev_ptr->filepath, MOUNTLEN, "/%s", buf);
+				snprintf(dev_ptr->filepath, MOUNTLEN, "/%s",
+				    buf);
 			}
-			if (dev_ptr->filepath[strlen(dev_ptr->filepath) - 1] == '/')
-				dev_ptr->filepath[strlen(dev_ptr->filepath) - 1] = '\0';
+			if (dev_ptr->filepath[strlen(dev_ptr->filepath) - 1]
+			    == '/')
+				dev_ptr->filepath[strlen(dev_ptr->filepath)
+				     - 1] = '\0';
 			return 0;
 		case PMV_MENU_EXIST:
 			dev_ptr->is_exist = !dev_ptr->is_exist;
@@ -1540,15 +1545,18 @@ pm_lvm_edit_menufmt(menudesc *m, int opt
 	int i;
 	char buf[STRSIZE];
 	lvms_t *dev_ptr = arg;
-	strlcpy(buf, msg_string(MSG_auto), STRSIZE);
+	strlcpy(buf, msg_string(MSG_auto), sizeof buf);
 
 	switch (opt) {
 		case PML_MENU_PV:
 			buf[0] = '\0';
-			for (i = 0; i < MAX_LVM_PV; i++)
-				if (dev_ptr->pv[i].pm != NULL)
-					snprintf(buf, STRSIZE, "%s %s",
-					    buf, dev_ptr->pv[i].pm_name);
+			for (i = 0; i < MAX_LVM_PV; i++) {
+				if (dev_ptr->pv[i].pm != NULL) {
+					strlcat(buf, " ", sizeof buf);
+					strlcat(buf, dev_ptr->pv[i].pm_name,
+					    sizeof buf);
+				}
+			}
 			wprintw(m->mw, "%-20s: %s",
 			     msg_string(MSG_lvm_disks_fmt), buf);
 			break;
@@ -1565,13 +1573,15 @@ pm_lvm_edit_menufmt(menudesc *m, int opt
 			break;
 		case PML_MENU_MAXPHYSICALVOLUMES:
 			if (dev_ptr->maxphysicalvolumes > 0)
-				snprintf(buf, STRSIZE, "%d", dev_ptr->maxphysicalvolumes);
+				snprintf(buf, STRSIZE, "%d",
+				    dev_ptr->maxphysicalvolumes);
 			wprintw(m->mw, "%-20s: %s",
 			    msg_string(MSG_lvm_maxpv_fmt), buf);
 			break;
 		case PML_MENU_PHYSICALEXTENTSIZE:
 			if (dev_ptr->physicalextentsize > 0)
-				snprintf(buf, STRSIZE, "%dM", dev_ptr->physicalextentsize);
+				snprintf(buf, STRSIZE, "%dM",
+				    dev_ptr->physicalextentsize);
 			wprintw(m->mw, "%-20s: %s",
 			    msg_string(MSG_lvm_extsiz_fmt), buf);
 			break;
@@ -1872,8 +1882,7 @@ pm_lvm_commit(void)
 {
 	int i, ii, error;
 	uint used_size = 0;
-	char params[STRSIZE*3];
-	char devs[STRSIZE*3];
+	char params[STRSIZE*3], devs[STRSIZE*3], arg[STRSIZE];
 
 	for (i = 0; i < MAX_LVM_VG; i++) {
 		/* Stage 0: checks */
@@ -1891,26 +1900,37 @@ pm_lvm_commit(void)
 		for (ii = 0; ii < MAX_LVM_PV && ! error; ii++)
 			if (lvms[i].pv[ii].pm != NULL) {
 				run_program(RUN_SILENT | RUN_ERROR_OK, 
-										"lvm pvremove -ffy /dev/r%s",
-										(char*)lvms[i].pv[ii].pm_name);
+				    "lvm pvremove -ffy /dev/r%s",
+				    (char*)lvms[i].pv[ii].pm_name);
 				error += run_program(RUN_DISPLAY | RUN_PROGRESS,
-										"lvm pvcreate -ffy /dev/r%s",
-										(char*)lvms[i].pv[ii].pm_name);
+				    "lvm pvcreate -ffy /dev/r%s",
+				    (char*)lvms[i].pv[ii].pm_name);
 				if (error)
 					break;
-				snprintf(devs, STRSIZE*3, "%s /dev/r%s", devs, (char*)lvms[i].pv[ii].pm_name);
+				strlcat(devs, " /dev/r", sizeof devs);
+				strlcat(devs, lvms[i].pv[ii].pm_name,
+				    sizeof devs);
 			}
 		if (error)
 			continue;
 		/* Stage 2: creating Volume Groups (VG's) */
-		if (lvms[i].maxlogicalvolumes > 0)
-			snprintf(params, STRSIZE*3, "%s -l %d", params, lvms[i].maxlogicalvolumes);
-		if (lvms[i].maxphysicalvolumes > 0)
-			snprintf(params, STRSIZE*3, "%s -p %d", params, lvms[i].maxphysicalvolumes);
-		if (lvms[i].physicalextentsize > 0)
-			snprintf(params, STRSIZE*3, "%s -s %d", params, lvms[i].physicalextentsize);
-		error += run_program(RUN_DISPLAY | RUN_PROGRESS, "lvm vgcreate %s %s %s",
-							params, lvms[i].name, devs);
+		if (lvms[i].maxlogicalvolumes > 0) {
+			snprintf(arg, sizeof arg, " -l %d",
+			    lvms[i].maxlogicalvolumes);
+			strlcat(params, arg, sizeof params);
+		}
+		if (lvms[i].maxphysicalvolumes > 0) {
+			snprintf(arg, sizeof arg, " -p %d",
+			    lvms[i].maxphysicalvolumes);
+			strlcat(params, arg, sizeof params);
+		}
+		if (lvms[i].physicalextentsize > 0) {
+			snprintf(arg, sizeof arg, " -s %d",
+			    lvms[i].physicalextentsize);
+			strlcat(params, arg, sizeof params);
+		}
+		error += run_program(RUN_DISPLAY | RUN_PROGRESS,
+		    "lvm vgcreate %s %s %s", params, lvms[i].name, devs);
 		if (error)
 			continue;
 		/* Stage 3: creating Logical Volumes (LV's) */
@@ -1919,30 +1939,62 @@ pm_lvm_commit(void)
 				continue;
 
 			params[0] = '\0';
-			snprintf(params, STRSIZE*3, "%s -C %c", params, lvms[i].lv[ii].contiguous?'y':'n');
-			snprintf(params, STRSIZE*3, "%s -M %c", params, lvms[i].lv[ii].persistent?'y':'n');
-			snprintf(params, STRSIZE*3, "%s -p %s", params, lvms[i].lv[ii].readonly?"r":"rw");
-			snprintf(params, STRSIZE*3, "%s -Z %c", params, lvms[i].lv[ii].zero?'y':'n');
-			if (strlen(lvms[i].lv[ii].name) > 0)
-				snprintf(params, STRSIZE*3, "%s -n %s", params, lvms[i].lv[ii].name);
-			if (strlen(lvms[i].lv[ii].extents) > 0)
-				snprintf(params, STRSIZE*3, "%s -l %s", params, lvms[i].lv[ii].extents);
-			if (lvms[i].lv[ii].minor > 0)
-				snprintf(params, STRSIZE*3, "%s --minor %d", params, lvms[i].lv[ii].minor);
+			snprintf(arg, sizeof arg, " -C %c",
+			    lvms[i].lv[ii].contiguous?'y':'n');
+			strlcat(params, arg, sizeof params);
+			snprintf(arg, sizeof arg, " -M %c",
+			    lvms[i].lv[ii].persistent?'y':'n');
+			strlcat(params, arg, sizeof params);
+			snprintf(arg, sizeof arg, " -p %s",
+			    lvms[i].lv[ii].readonly?"r":"rw");
+			strlcat(params, arg, sizeof params);
+			snprintf(arg, sizeof arg, " -Z %c",
+			    lvms[i].lv[ii].zero?'y':'n');
+			strlcat(params, arg, sizeof params);
+			if (strlen(lvms[i].lv[ii].name) > 0) {
+				snprintf(arg, sizeof arg, " -n %s",
+				    lvms[i].lv[ii].name);
+				strlcat(params, arg, sizeof params);
+			}
+			if (strlen(lvms[i].lv[ii].extents) > 0) {
+				snprintf(arg, sizeof arg, " -l %s",
+				    lvms[i].lv[ii].extents);
+				strlcat(params, arg, sizeof params);
+			}
+			if (lvms[i].lv[ii].minor > 0) {
+				snprintf(arg, sizeof arg, " --minor %d",
+				    lvms[i].lv[ii].minor);
+				strlcat(params, arg, sizeof params);
+			}
 			if (lvms[i].lv[ii].mirrors > 0) {
-				snprintf(params, STRSIZE*3, "%s -m %d", params, lvms[i].lv[ii].mirrors);
-				if (lvms[i].lv[ii].regionsize > 0)
-					snprintf(params, STRSIZE*3, "%s -R %d", params, lvms[i].lv[ii].regionsize);
+				snprintf(arg, sizeof arg, " -m %d",
+				    lvms[i].lv[ii].mirrors);
+				strlcat(params, arg, sizeof params);
+				if (lvms[i].lv[ii].regionsize > 0) {
+					snprintf(arg, sizeof arg, " -R %d",
+					     lvms[i].lv[ii].regionsize);
+					strlcat(params, arg, sizeof params);
+				}
+			}
+			if (lvms[i].lv[ii].readahead > 0) {
+				snprintf(arg, sizeof arg, " -r %d",
+				    lvms[i].lv[ii].readahead);
+				strlcat(params, arg, sizeof params);
 			}
-			if (lvms[i].lv[ii].readahead > 0)
-				snprintf(params, STRSIZE*3, "%s -r %d", params, lvms[i].lv[ii].readahead);
 			if (lvms[i].lv[ii].stripes > 0) {
-				snprintf(params, STRSIZE*3, "%s -i %d", params, lvms[i].lv[ii].stripes);
-				if (lvms[i].lv[ii].stripesize > 0)
-					snprintf(params, STRSIZE*3, "%s -I %d", params, lvms[i].lv[ii].stripesize);
+				snprintf(arg, sizeof arg, " -i %d",
+				    lvms[i].lv[ii].stripes);
+				strlcat(params, arg, sizeof params);
+				if (lvms[i].lv[ii].stripesize > 0) {
+					snprintf(arg, sizeof arg, " -I %d",
+					    lvms[i].lv[ii].stripesize);
+					strlcat(params, arg, sizeof params);
+				}
 			}
-			snprintf(params, STRSIZE*3, "%s -L %" PRIi64 "M",
-			    params, lvms[i].lv[ii].size);
+			snprintf(arg, sizeof arg, " -L %" PRIi64 "M",
+			    lvms[i].lv[ii].size);
+			strlcat(params, arg, sizeof params);
+
 			error += run_program(RUN_DISPLAY | RUN_PROGRESS,
 			    "lvm lvcreate %s %s", params, lvms[i].name);
 		}
@@ -1968,7 +2020,7 @@ int
 pm_getrefdev(struct pm_devs *pm_cur)
 {
 	int i, ii, dev_num, num_devs, num_devs_s;
-	char dev[SSTRSIZE]; dev[0] = '\0';
+	char descr[SSTRSIZE], dev[SSTRSIZE] = "";
 
 	pm_cur->refdev = NULL;
 	if (! strncmp(pm_cur->diskdev, "cgd", 3)) {
@@ -1976,11 +2028,11 @@ pm_getrefdev(struct pm_devs *pm_cur)
 		for (i = 0; i < MAX_CGD; i++)
 			if (cgds[i].blocked && cgds[i].node == dev_num) {
 				pm_cur->refdev = &cgds[i];
-				snprintf(pm_cur->diskdev_descr,
-				    sizeof(pm_cur->diskdev_descr),
-				    "%s (%s, %s-%d)",
-				    pm_cur->diskdev_descr, cgds[i].pm_name,
+				snprintf(descr, sizeof descr,
+				    " (%s, %s-%d)", cgds[i].pm_name,
 				    cgds[i].enc_type, cgds[i].key_size);
+				strlcat(pm_cur->diskdev_descr, descr,
+				    sizeof(pm_cur->diskdev_descr));
 				break;
 			}
  	} else if (! strncmp(pm_cur->diskdev, "vnd", 3)) {
@@ -1991,11 +2043,10 @@ pm_getrefdev(struct pm_devs *pm_cur)
 				vnds[i].pm->parts->pscheme->get_part_device(
 				    vnds[i].pm->parts, vnds[i].pm_part,
 				    dev, sizeof dev, NULL, plain_name, false);
-				snprintf(pm_cur->diskdev_descr,
-				    sizeof(pm_cur->diskdev_descr),
-				    "%s (%s, %s)",
-				    pm_cur->diskdev_descr, dev,
-				    vnds[i].filepath);
+				snprintf(descr, sizeof descr, " (%s, %s)",
+				    dev, vnds[i].filepath);
+				strlcat(pm_cur->diskdev_descr, descr,
+				    sizeof(pm_cur->diskdev_descr));
 				break;
 			}
 	} else if (! strncmp(pm_cur->diskdev, "raid", 4)) {
@@ -2011,10 +2062,12 @@ pm_getrefdev(struct pm_devs *pm_cur)
 						else
 							num_devs++;
 					}
-				snprintf(pm_cur->diskdev_descr,
-					sizeof(pm_cur->diskdev_descr),
-					"%s (lvl %d, %d disks, %d spare)", pm_cur->diskdev_descr,
-					raids[i].raid_level, num_devs, num_devs_s);
+				snprintf(descr, sizeof descr,
+				    " (lvl %d, %d disks, %d spare)",
+				    raids[i].raid_level, num_devs,
+				    num_devs_s);
+				strlcat(pm_cur->diskdev_descr, descr,
+				    sizeof(pm_cur->diskdev_descr));
 				break;
 			}
 	} else

Reply via email to