aboutsummaryrefslogtreecommitdiff
path: root/sbin/fsck_ifs
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>1999-11-27 16:10:31 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>1999-11-27 16:10:31 +0000
commit703eaae72d9615bfdf411d1353adb20e60bd6467 (patch)
tree7d2a5b4e98fa31de8a0384c7eb47cb7bfe0c9c3f /sbin/fsck_ifs
parentf55c07ab9321e7baaa3d8e1612911e36e957e495 (diff)
downloadsrc-703eaae72d9615bfdf411d1353adb20e60bd6467.tar.gz
src-703eaae72d9615bfdf411d1353adb20e60bd6467.zip
Allow root-reloading also for chr devices.
Notes
Notes: svn path=/head/; revision=53754
Diffstat (limited to 'sbin/fsck_ifs')
-rw-r--r--sbin/fsck_ifs/preen.c47
1 files changed, 3 insertions, 44 deletions
diff --git a/sbin/fsck_ifs/preen.c b/sbin/fsck_ifs/preen.c
index 94baefa7d266..aedb5921cd99 100644
--- a/sbin/fsck_ifs/preen.c
+++ b/sbin/fsck_ifs/preen.c
@@ -71,10 +71,8 @@ char hotroot;
static void addpart __P((char *name, char *fsname, long auxdata));
static struct disk *finddisk __P((char *name));
-static char *rawname __P((char *name));
static int startdisk __P((struct disk *dk,
int (*checkit)(char *, char *, long, int)));
-static char *unrawname __P((char *name));
int
checkfstab(preen, maxrun, docheck, chkit)
@@ -311,10 +309,11 @@ retry:
printf("Can't stat %s: %s\n", newname, strerror(errno));
return (origname);
}
- if ((stblock.st_mode & S_IFMT) == S_IFBLK) {
+ if ((stblock.st_mode & S_IFMT) == S_IFBLK ||
+ (stblock.st_mode & S_IFMT) == S_IFCHR) {
if (stslash.st_dev == stblock.st_rdev)
hotroot++;
- raw = rawname(newname);
+ raw = newname;
if (stat(raw, &stchar) < 0) {
printf("Can't stat %s: %s\n", raw, strerror(errno));
return (origname);
@@ -327,10 +326,6 @@ retry:
printf("%s is not a character device\n", raw);
return (origname);
}
- } else if ((stblock.st_mode & S_IFMT) == S_IFCHR && !retried) {
- newname = unrawname(newname);
- retried++;
- goto retry;
} else if ((stblock.st_mode & S_IFMT) == S_IFDIR && !retried) {
len = strlen(origname) - 1;
if (len > 0 && origname[len] == '/')
@@ -351,39 +346,3 @@ retry:
*/
return (origname);
}
-
-static char *
-unrawname(name)
- char *name;
-{
- char *dp;
- struct stat stb;
-
- if ((dp = strrchr(name, '/')) == 0)
- return (name);
- if (stat(name, &stb) < 0)
- return (name);
- if ((stb.st_mode & S_IFMT) != S_IFCHR)
- return (name);
- if (dp[1] != 'r')
- return (name);
- (void)strcpy(&dp[1], &dp[2]);
- return (name);
-}
-
-static char *
-rawname(name)
- char *name;
-{
- static char rawbuf[32];
- char *dp;
-
- if ((dp = strrchr(name, '/')) == 0)
- return (0);
- *dp = 0;
- (void)strcpy(rawbuf, name);
- *dp = '/';
- (void)strcat(rawbuf, "/r");
- (void)strcat(rawbuf, &dp[1]);
- return (rawbuf);
-}