summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2011-10-23 20:03:33 +0000
committermarcel <marcel@FreeBSD.org>2011-10-23 20:03:33 +0000
commit26b45aef71d0af57c82518de4e87288d5c515180 (patch)
tree8d614d8dc026ec174277f6765e8c4aa3710fd69c /sys/kern
parenteb67f83b02065565ec24b8ab3da09fc389452cda (diff)
downloadFreeBSD-src-26b45aef71d0af57c82518de4e87288d5c515180.zip
FreeBSD-src-26b45aef71d0af57c82518de4e87288d5c515180.tar.gz
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 <lacombar@gmail.com>
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_mountroot.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/sys/kern/vfs_mountroot.c b/sys/kern/vfs_mountroot.c
index ccbcb33..98e252e 100644
--- a/sys/kern/vfs_mountroot.c
+++ b/sys/kern/vfs_mountroot.c
@@ -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);
}
OpenPOWER on IntegriCloud