diff options
author | marcel <marcel@FreeBSD.org> | 2011-10-23 20:03:33 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2011-10-23 20:03:33 +0000 |
commit | 26b45aef71d0af57c82518de4e87288d5c515180 (patch) | |
tree | 8d614d8dc026ec174277f6765e8c4aa3710fd69c /sys/kern | |
parent | eb67f83b02065565ec24b8ab3da09fc389452cda (diff) | |
download | FreeBSD-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.c | 41 |
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); } |