diff options
-rw-r--r-- | config.make.in | 5 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | utils/Makefile | 2 | ||||
-rw-r--r-- | utils/mount.c | 35 |
4 files changed, 40 insertions, 8 deletions
diff --git a/config.make.in b/config.make.in index edb74c07..4d2abcca 100644 --- a/config.make.in +++ b/config.make.in @@ -85,6 +85,11 @@ HAVE_DAEMON = @HAVE_DAEMON@ libdaemon_CFLAGS = @libdaemon_CFLAGS@ libdaemon_LIBS = @libdaemon_LIBS@ +# How to compile and link against libblkid. +HAVE_BLKID = @HAVE_BLKID@ +libblkid_CFLAGS = @libblkid_CFLAGS@ +libblkid_LIBS = @libblkid_LIBS@ + # Whether Sun RPC support is available. HAVE_SUN_RPC = @HAVE_SUN_RPC@ diff --git a/configure.ac b/configure.ac index d40c01fb..5340b508 100644 --- a/configure.ac +++ b/configure.ac @@ -303,6 +303,12 @@ PKG_CHECK_MODULES([libdaemon], [libdaemon], AC_SUBST([libdaemon_LIBS]) AC_SUBST([libdaemon_CFLAGS]) +PKG_CHECK_MODULES([libblkid], [blkid], + [AC_DEFINE([HAVE_BLKID], [1], [Use libblkid])], + [true]) +AC_SUBST([libblkid_LIBS]) +AC_SUBST([libblkid_CFLAGS]) + AC_CONFIG_FILES([config.make ${makefiles}]) AC_OUTPUT diff --git a/utils/Makefile b/utils/Makefile index 8e8591f7..acc8a700 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -39,6 +39,8 @@ LDLIBS += -lpthread login-LDLIBS = -lutil $(LIBCRYPT) addauth-LDLIBS = $(LIBCRYPT) setauth-LDLIBS = $(LIBCRYPT) +mount-LDLIBS = $(libblkid-LIBS) +mount-CPPFLAGS = $(libblkid-CFLAGS) INSTALL-login-ops = -o root -m 4755 INSTALL-ids-ops = -o root -m 4755 diff --git a/utils/mount.c b/utils/mount.c index 77b2138e..04519da2 100644 --- a/utils/mount.c +++ b/utils/mount.c @@ -28,11 +28,14 @@ #include <hurd/fsys.h> #include <hurd/fshelp.h> #include <hurd/paths.h> +#ifdef HAVE_BLKID +#include <blkid/blkid.h> +#endif #include "match-options.h" #define SEARCH_FMTS _HURD "%sfs\0" _HURD "%s" -#define DEFAULT_FSTYPE "ext2" +#define DEFAULT_FSTYPE "auto" static char *fstype = DEFAULT_FSTYPE; static char *device, *mountpoint; @@ -338,6 +341,29 @@ do_mount (struct fs *fs, int remount) return EBUSY; } + if (strcmp (fs->mntent.mnt_type, "auto") == 0) + { +#if HAVE_BLKID + char *type = + blkid_get_tag_value (NULL, "TYPE", fs->mntent.mnt_fsname); + if (! type) + { + error (0, 0, "failed to detect file system type"); + return EFTYPE; + } + else + { + fs->mntent.mnt_type = strdup (type); + if (! fs->mntent.mnt_type) + error (3, ENOMEM, "failed to allocate memory"); + } +#else + fs->mntent.mnt_type = strdup ("ext2"); + if (! fs->mntent.mnt_type) + error (3, ENOMEM, "failed to allocate memory"); +#endif + } + err = fs_type (fs, &type); if (err) { @@ -579,13 +605,6 @@ main (int argc, char **argv) mnt_opts: 0, mnt_freq: 0, mnt_passno: 0 }; - struct fstype *fst; - - err = fstypes_get (fstab->types, fstype, &fst); - if (err) - error (106, err, "cannot initialize type %s", fstype); - if (fst->program == 0) - error (2, 0, "filesystem type %s not recognized", fstype); err = fstab_add_mntent (fstab, &m, &fs); if (err) |