Module Name: src Committed By: msaitoh Date: Sun Aug 18 13:22:49 UTC 2019
Modified Files: src/usr.sbin/sysinst [netbsd-9]: disklabel.c Log Message: Pull up following revision(s) (requested by martin in ticket #79): usr.sbin/sysinst/disklabel.c: revision 1.13 Fix some "partition index" (as used in the abstract interface) versus disklabel "partition letter" confusion. To generate a diff of this commit: cvs rdiff -u -r1.10.2.2 -r1.10.2.3 src/usr.sbin/sysinst/disklabel.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/disklabel.c diff -u src/usr.sbin/sysinst/disklabel.c:1.10.2.2 src/usr.sbin/sysinst/disklabel.c:1.10.2.3 --- src/usr.sbin/sysinst/disklabel.c:1.10.2.2 Sun Aug 18 13:21:40 2019 +++ src/usr.sbin/sysinst/disklabel.c Sun Aug 18 13:22:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: disklabel.c,v 1.10.2.2 2019/08/18 13:21:40 msaitoh Exp $ */ +/* $NetBSD: disklabel.c,v 1.10.2.3 2019/08/18 13:22:49 msaitoh Exp $ */ /* * Copyright 2018 The NetBSD Foundation, Inc. @@ -814,9 +814,25 @@ disklabel_get_part_device(const struct d part_id ptn, char *devname, size_t max_devname_len, int *part, enum dev_name_usage which_name, bool with_path) { + const struct disklabel_disk_partitions *parts = + (const struct disklabel_disk_partitions*)arg; + part_id id; + int part_index; + char pname; + + if (ptn >= parts->l.d_npartitions) + return false; + + for (id = part_index = 0; id < ptn && + part_index < parts->l.d_npartitions; part_index++) + if (parts->l.d_partitions[part_index].p_fstype != FS_UNUSED || + parts->l.d_partitions[part_index].p_size != 0) + id++; if (part != 0) - *part = ptn; + *part = part_index; + + pname = 'a'+ part_index; switch (which_name) { case parent_device_only: @@ -826,18 +842,18 @@ disklabel_get_part_device(const struct d case plain_name: if (with_path) snprintf(devname, max_devname_len, _PATH_DEV "%s%c", - arg->disk, (char)ptn + 'a'); + arg->disk, pname); else snprintf(devname, max_devname_len, "%s%c", - arg->disk, (char)ptn + 'a'); + arg->disk, pname); return true; case raw_dev_name: if (with_path) snprintf(devname, max_devname_len, _PATH_DEV "r%s%c", - arg->disk, (char)ptn + 'a'); + arg->disk, pname); else snprintf(devname, max_devname_len, "r%s%c", - arg->disk, (char)ptn + 'a'); + arg->disk, pname); return true; } @@ -1024,7 +1040,7 @@ disklabel_find_by_name(struct disk_parti (const struct disklabel_disk_partitions*)arg; char *sl, part; ptrdiff_t n; - part_id pno; + part_id pno, id, i; sl = strrchr(name, '/'); if (sl == NULL) @@ -1040,7 +1056,11 @@ disklabel_find_by_name(struct disk_parti return NO_PART; if (parts->l.d_partitions[pno].p_fstype == FS_UNUSED) return NO_PART; - return pno; + for (id = 0, i = 0; i < pno; i++) + if (parts->l.d_partitions[i].p_fstype != FS_UNUSED || + parts->l.d_partitions[i].p_size != 0) + id++; + return id; } static void