diff options
author | jmallett <jmallett@FreeBSD.org> | 2003-04-25 01:12:35 +0000 |
---|---|---|
committer | jmallett <jmallett@FreeBSD.org> | 2003-04-25 01:12:35 +0000 |
commit | a521aa5aa4b354de2cb042c0909b4830a4884051 (patch) | |
tree | 41c3a9d908c2174bed0fdf5812304039f4e98d8b /sbin | |
parent | 5464273ad70a1fc80994e78e7f8f16b771fc9dbb (diff) | |
download | FreeBSD-src-a521aa5aa4b354de2cb042c0909b4830a4884051.zip FreeBSD-src-a521aa5aa4b354de2cb042c0909b4830a4884051.tar.gz |
Back out previous delta to fix fsck on filesystems without an fstab entry,
where we want to take the disklabel filesystem type of "4.2BSD" and use
fsck_4.2bsd on those filesystems.
Add a comment about why the code is there, now that we know:
* XXX This is a kludge to make automatic filesystem type guessing
* from the disklabel work for "4.2BSD" filesystems. It does a
* very limited subset of transliteration to a normalised form of
* filesystem name, and we do not seem to enforce a filesystem
* name character set.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/fsck/fsck.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/sbin/fsck/fsck.c b/sbin/fsck/fsck.c index b483a9b..35a4b91 100644 --- a/sbin/fsck/fsck.c +++ b/sbin/fsck/fsck.c @@ -278,7 +278,7 @@ isok(struct fstab *fs) static int -checkfs(const char *vfstype, const char *spec, const char *mntpt, +checkfs(const char *pvfstype, const char *spec, const char *mntpt, char *auxopt, pid_t *pidp) { /* List of directories containing fsck_xxx subcommands. */ @@ -291,6 +291,7 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, pid_t pid; int argc, i, status, maxargc; char *optbuf, execname[MAXPATHLEN + 1], execbase[MAXPATHLEN]; + char *vfstype = NULL; const char *extra = NULL; #ifdef __GNUC__ @@ -298,6 +299,24 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, (void) &optbuf; (void) &vfstype; #endif + /* + * We convert the vfstype to lowercase and any spaces to underscores + * to not confuse the issue + * + * XXX This is a kludge to make automatic filesystem type guessing + * from the disklabel work for "4.2BSD" filesystems. It does a + * very limited subset of transliteration to a normalised form of + * filesystem name, and we do not seem to enforce a filesystem + * name character set. + */ + vfstype = strdup(pvfstype); + if (vfstype == NULL) + perror("strdup(pvfstype)"); + for (i = 0; i < strlen(vfstype); i++) { + vfstype[i] = tolower(vfstype[i]); + if (vfstype[i] == ' ') + vfstype[i] = '_'; + } extra = getoptions(vfstype); optbuf = NULL; @@ -334,6 +353,7 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, warn("vfork"); if (optbuf) free(optbuf); + free(vfstype); return (1); case 0: /* Child. */ @@ -367,6 +387,8 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, if (optbuf) free(optbuf); + free(vfstype); + if (pidp) { *pidp = pid; return 0; |