summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorjmallett <jmallett@FreeBSD.org>2003-04-25 01:12:35 +0000
committerjmallett <jmallett@FreeBSD.org>2003-04-25 01:12:35 +0000
commita521aa5aa4b354de2cb042c0909b4830a4884051 (patch)
tree41c3a9d908c2174bed0fdf5812304039f4e98d8b /sbin
parent5464273ad70a1fc80994e78e7f8f16b771fc9dbb (diff)
downloadFreeBSD-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.c24
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;
OpenPOWER on IntegriCloud