Author: marcel
Date: Sun Oct 23 20:03:33 2011
New Revision: 226673
URL: http://svn.freebsd.org/changeset/base/226673

Log:
  Don't terminate the interactive root mount prompt on mount failure.
  This restores the previous behaviour. While here, match '?' and '.'
  inputs exactly and improve the error message.
  
  Requested by: avg@
  Derived from a patch by: Arnaud Lacombe <lacom...@gmail.com>

Modified:
  head/sys/kern/vfs_mountroot.c

Modified: head/sys/kern/vfs_mountroot.c
==============================================================================
--- head/sys/kern/vfs_mountroot.c       Sun Oct 23 19:46:01 2011        
(r226672)
+++ head/sys/kern/vfs_mountroot.c       Sun Oct 23 20:03:33 2011        
(r226673)
@@ -483,26 +483,27 @@ parse_dir_ask(char **conf)
        printf("  .               Yield 1 second (for background tasks)\n");
        printf("  <empty line>    Abort manual input\n");
 
- again:
-       printf("\nmountroot> ");
-       gets(name, sizeof(name), GETS_ECHO);
-       if (name[0] == '\0')
-               return (0);
-       if (name[0] == '?') {
-               printf("\nList of GEOM managed disk devices:\n  ");
-               g_dev_print();
-               goto again;
-       }
-       if (name[0] == '.') {
-               pause("rmask", hz);
-               goto again;
-       }
-       mnt = name;
-       error = parse_mount(&mnt);
-       if (error == -1) {
-               printf("Invalid specification.\n");
-               goto again;
-       }
+       do {
+               error = EINVAL;
+               printf("\nmountroot> ");
+               gets(name, sizeof(name), GETS_ECHO);
+               if (name[0] == '\0')
+                       break;
+               if (name[0] == '?' && name[1] == '\0') {
+                       printf("\nList of GEOM managed disk devices:\n  ");
+                       g_dev_print();
+                       continue;
+               }
+               if (name[0] == '.' && name[1] == '\0') {
+                       pause("rmask", hz);
+                       continue;
+               }
+               mnt = name;
+               error = parse_mount(&mnt);
+               if (error == -1)
+                       printf("Invalid file system specification.\n");
+       } while (error != 0);
+
        return (error);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to