Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/sysinst Fix a bug when installing to pre-exising GP...



details:   https://anonhg.NetBSD.org/src/rev/3866b5669464
branches:  trunk
changeset: 965002:3866b5669464
user:      martin <martin%NetBSD.org@localhost>
date:      Mon Aug 26 12:14:06 2019 +0000

description:
Fix a bug when installing to pre-exising GPT partitions.
Handle GPT labels with spaces.

diffstat:

 usr.sbin/sysinst/gpt.c |  35 +++++++++++++++++++++++++----------
 1 files changed, 25 insertions(+), 10 deletions(-)

diffs (96 lines):

diff -r fc7dc7c06b81 -r 3866b5669464 usr.sbin/sysinst/gpt.c
--- a/usr.sbin/sysinst/gpt.c    Mon Aug 26 10:35:35 2019 +0000
+++ b/usr.sbin/sysinst/gpt.c    Mon Aug 26 12:14:06 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: gpt.c,v 1.10 2019/08/14 13:02:23 martin Exp $  */
+/*     $NetBSD: gpt.c,v 1.11 2019/08/26 12:14:06 martin Exp $  */
 
 /*
  * Copyright 2018 The NetBSD Foundation, Inc.
@@ -1131,7 +1131,7 @@
        /* Check label */
        if (strcmp(p->gp_label, old.gp_label) != 0) {
                if (run_program(RUN_SILENT,
-                   "gpt label -b %" PRIu64 " -l %s %s",
+                   "gpt label -b %" PRIu64 " -l \'%s\' %s",
                    p->gp_start, p->gp_label, disk) != 0)
                        return false;
        }
@@ -1213,6 +1213,20 @@
        return true;
 }
 
+static void
+escape_spaces(char *dest, const char *src)
+{
+       unsigned char c;
+
+       while (*src) {
+               c = *src++;
+               if (isspace(c) || c == '\\')
+                       *dest++ = '\\';
+               *dest++ = c;
+       }
+       *dest = 0;
+}
+
 static bool
 gpt_get_part_device(const struct disk_partitions *arg,
     part_id id, char *devname, size_t max_devname_len, int *part,
@@ -1221,6 +1235,7 @@
        const struct gpt_disk_partitions *parts =
            (const struct gpt_disk_partitions*)arg;
        struct  gpt_part_entry *p = parts->partitions;
+       char tmpname[GPT_LABEL_LEN*2];
        part_id no;
 
 
@@ -1239,12 +1254,14 @@
 
        switch (usage) {
        case logical_name:
-               if (p->gp_label[0] != 0)
+               if (p->gp_label[0] != 0) {
+                       escape_spaces(tmpname, p->gp_label);
                        snprintf(devname, max_devname_len,
-                           "NAME=%s", p->gp_label);
-               else
+                           "NAME=%s", tmpname);
+               } else {
                        snprintf(devname, max_devname_len,
                            "NAME=%s", p->gp_id);
+               }
                break;
        case plain_name:
                assert(p->gp_flags & GPEF_WEDGE);
@@ -1275,7 +1292,7 @@
 {
        struct gpt_disk_partitions *parts = (struct gpt_disk_partitions*)arg;
        struct gpt_part_entry *p, *n;
-       char label_arg[sizeof(p->gp_label) + 4];
+       char label_arg[sizeof(p->gp_label) + 10];
        char diskpath[MAXPATHLEN];
        int fd, bits = 0;
        bool root_is_new = false, efi_is_new = false;
@@ -1295,11 +1312,9 @@
        close(fd);
 
        /*
-        * Mark all partitions as "have no wedge yet". While there,
-        * collect first root and efi partition (if available)
+        * Collect first root and efi partition (if available)
         */
        for (pno = 0, p = parts->partitions; p != NULL; p = p->gp_next, pno++) {
-               p->gp_flags &= ~GPEF_WEDGE;
                if (root_id == NO_PART && p->gp_type != NULL) {
                        if (p->gp_type->gent.generic_ptype == PT_root &&
                            p->gp_start == pm->ptstart) {
@@ -1373,7 +1388,7 @@
                if (p->gp_label[0] == 0)
                        label_arg[0] = 0;
                else
-                       sprintf(label_arg, "-l %s", p->gp_label);
+                       sprintf(label_arg, "-l \'%s\'", p->gp_label);
 
                if (p->gp_type != NULL)
                        run_program(RUN_SILENT,



Home | Main Index | Thread Index | Old Index