From e33b39a8c402b02b758aa54f0a3caff97f5fdbda Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 16 Feb 2012 00:20:02 +0100 Subject: [PATCH] fsck: replace fsprobe with libmount utils Signed-off-by: Karel Zak --- fsck/Makefile.am | 3 +-- fsck/fsck.c | 31 +++++++++++++++++-------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/fsck/Makefile.am b/fsck/Makefile.am index a197fd558..224967147 100644 --- a/fsck/Makefile.am +++ b/fsck/Makefile.am @@ -3,7 +3,6 @@ include $(top_srcdir)/config/include-Makefile.am sbin_PROGRAMS = fsck dist_man_MANS = fsck.8 -fsck_SOURCES = fsck.c fsck.h $(top_srcdir)/lib/ismounted.c \ - $(top_srcdir)/lib/fsprobe.c +fsck_SOURCES = fsck.c fsck.h $(top_srcdir)/lib/ismounted.c fsck_LDADD = $(ul_libmount_la) $(ul_libblkid_la) fsck_CFLAGS = $(AM_CFLAGS) -I$(ul_libmount_incdir) -I$(ul_libblkid_incdir) diff --git a/fsck/fsck.c b/fsck/fsck.c index 903ee7165..02c3898ff 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -44,8 +44,6 @@ #include #include #include - -#include "fsprobe.h" #include #include "nls.h" @@ -110,6 +108,7 @@ char *fsck_path = 0; /* parsed fstab */ static struct libmnt_table *fstab; +static struct libmnt_cache *mntcache; static int count_slaves(dev_t disk); @@ -359,14 +358,12 @@ static void load_fs_info(void) { const char *path; - mnt_init_debug(0); - fstab = mnt_new_table(); if (!fstab) err(FSCK_EX_ERROR, ("failed to initialize libmount table")); mnt_table_set_parser_errcb(fstab, parser_errcb); - mnt_table_set_cache(fstab, mnt_new_cache()); + mnt_table_set_cache(fstab, mntcache); errno = 0; @@ -386,17 +383,20 @@ static void load_fs_info(void) } } -/* Lookup filesys in /etc/fstab and return the corresponding entry. */ -static struct libmnt_fs *lookup(char *spec) +/* + * Lookup filesys in /etc/fstab and return the corresponding entry. + * The @path has to be real path (no TAG) by mnt_resolve_spec(). + */ +static struct libmnt_fs *lookup(char *path) { struct libmnt_fs *fs; - if (!spec) + if (!path) return NULL; - fs = mnt_table_find_source(fstab, spec, MNT_ITER_FORWARD); + fs = mnt_table_find_srcpath(fstab, path, MNT_ITER_FORWARD); if (!fs) - fs = mnt_table_find_target(fstab, spec, MNT_ITER_FORWARD); + fs = mnt_table_find_target(fstab, path, MNT_ITER_FORWARD); return fs; } @@ -1243,7 +1243,9 @@ static void PRS(int argc, char *argv[]) if ((arg[0] == '/' && !opts_for_fsck) || strchr(arg, '=')) { if (num_devices >= MAX_DEVICES) errx(FSCK_EX_ERROR, _("too many devices")); - dev = fsprobe_get_devname_by_spec(arg); + + dev = mnt_resolve_spec(arg, mntcache); + if (!dev && strchr(arg, '=')) { /* * Check to see if we failed because @@ -1383,7 +1385,9 @@ int main(int argc, char *argv[]) bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); - fsprobe_init(); + mnt_init_debug(0); /* init libmount debug mask */ + mntcache = mnt_new_cache(); /* no fatal error if failed */ + PRS(argc, argv); if (!notitle) @@ -1452,8 +1456,7 @@ int main(int argc, char *argv[]) } status |= wait_many(FLAG_WAIT_ALL); free(fsck_path); - fsprobe_exit(); - mnt_free_cache(mnt_table_get_cache(fstab)); + mnt_free_cache(mntcache); mnt_free_table(fstab); return status; }