Hi,

When assigning mount points to an already-partitioned disk
without a its fstab handy, it's annoying to type the partition
letters one after another. (And sing the alphabet each time or
look at the output of 'p' for letters after 'f'. I blame hex.)
I could go back to preeschool and learn the alphabet, but this
seemed easier.

This patch makes the 'n' (set mount point) command provide the
lowest partition of a mountable type without a set mount-point
as the default in the partition-selection prompt.

It also addresses the fact that get_mp() hadn't been updated
in a while and wasn't aware that RAID partitions can't have
mount points.

Thoughts?


Index: sys/sys/disklabel.h
===================================================================
RCS file: /cvs/src/sys/sys/disklabel.h,v
retrieving revision 1.60
diff -u -p -r1.60 disklabel.h
--- sys/sys/disklabel.h 5 May 2014 13:32:15 -0000       1.60
+++ sys/sys/disklabel.h 15 Jun 2014 02:22:20 -0000
@@ -275,6 +275,10 @@ static char *dktypenames[] = {
 #define FS_NTFS                20              /* Windows/NT file system */
 #define FS_UDF         21              /* UDF (DVD) filesystem */
 
+#define FS_ALLOWS_NAME(t)      ((t) != FS_UNUSED && (t) != FS_SWAP && \
+                                (t) != FS_OTHER  && (t) != FS_BOOT && \
+                                (t) != FS_RAID)
+
 #ifdef DKTYPENAMES
 static char *fstypenames[] = {
        "unused",
Index: sbin/disklabel/editor.c
===================================================================
RCS file: /cvs/src/sbin/disklabel/editor.c,v
retrieving revision 1.286
diff -u -p -r1.286 editor.c
--- sbin/disklabel/editor.c     2 May 2014 23:17:29 -0000       1.286
+++ sbin/disklabel/editor.c     15 Jun 2014 02:22:20 -0000
@@ -933,12 +933,23 @@ void
 editor_name(struct disklabel *lp, char *p)
 {
        struct partition *pp;
+       char buf[2];
        int partno;
 
        /* Change which partition? */
        if (p == NULL) {
+               memset(buf, 0, sizeof(buf));
+               pp = &lp->d_partitions[0];
+               for (partno = 0; partno < MAXPARTITIONS; partno++, pp++) {
+                       if (mountpoints[partno] == NULL &&
+                           partno != RAW_PART &&
+                           FS_ALLOWS_NAME(pp->p_fstype)) {
+                               buf[0] = partno + 'a';
+                               break;
+                       }
+               }
                p = getstring("partition to name",
-                   "The letter of the partition to name, a - p.", NULL);
+                   "The letter of the partition to name, a - p.", buf);
        }
        if (p == NULL) {
                fputs("Command aborted\n", stderr);
@@ -958,9 +969,7 @@ editor_name(struct disklabel *lp, char *
        }
 
        /* Not all fstypes can be named */
-       if (pp->p_fstype == FS_UNUSED || pp->p_fstype == FS_SWAP ||
-           pp->p_fstype == FS_BOOT || pp->p_fstype == FS_OTHER ||
-           pp->p_fstype == FS_RAID) {
+       if (!FS_ALLOWS_NAME(pp->p_fstype)) {
                fprintf(stderr, "You cannot name a filesystem of type %s.\n",
                    fstypenames[lp->d_partitions[partno].p_fstype]);
                return;
@@ -2166,9 +2175,7 @@ get_mp(struct disklabel *lp, int partno)
        char *p;
        int i;
 
-       if (fstabfile && pp->p_fstype != FS_UNUSED &&
-           pp->p_fstype != FS_SWAP && pp->p_fstype != FS_BOOT &&
-           pp->p_fstype != FS_OTHER) {
+       if (fstabfile && FS_ALLOWS_NAME(pp->p_fstype)) {
                for (;;) {
                        p = getstring("mount point",
                            "Where to mount this filesystem (ie: / /var /usr)",

Reply via email to