From: Karel Zak Date: Mon, 17 Apr 2023 11:22:03 +0000 (+0200) Subject: libmount: don't define struct stat is unnecessary X-Git-Tag: v2.39-rc3~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0d754deeddb60c016e199faa6ad4f1b26e934897;p=thirdparty%2Futil-linux.git libmount: don't define struct stat is unnecessary Let's introduce simple function to hide 'struct stat' if unnecessary. Signed-off-by: Karel Zak --- diff --git a/libmount/src/hook_mkdir.c b/libmount/src/hook_mkdir.c index 6e4d736638..da9c407ea2 100644 --- a/libmount/src/hook_mkdir.c +++ b/libmount/src/hook_mkdir.c @@ -36,7 +36,6 @@ static int is_mkdir_required(struct libmnt_context *cxt, const char *tgt, mode_t struct libmnt_optlist *ol; struct libmnt_opt *opt; const char *mstr = NULL; - struct stat st; assert(cxt); assert(cxt->map_userspace); @@ -57,7 +56,7 @@ static int is_mkdir_required(struct libmnt_context *cxt, const char *tgt, mode_t if (!opt) return 0; - if (mnt_stat_mountpoint(tgt, &st) == 0) + if (mnt_is_path(tgt)) return 0; mstr = mnt_opt_get_value(opt); diff --git a/libmount/src/mountP.h b/libmount/src/mountP.h index 7e280a4f8b..4af212388c 100644 --- a/libmount/src/mountP.h +++ b/libmount/src/mountP.h @@ -127,8 +127,10 @@ extern int mnt_get_filesystems(char ***filesystems, const char *pattern); extern void mnt_free_filesystems(char **filesystems); extern char *mnt_get_kernel_cmdline_option(const char *name); + extern int mnt_stat_mountpoint(const char *target, struct stat *st); extern int mnt_lstat_mountpoint(const char *target, struct stat *st); +extern int mnt_is_path(const char *target); extern int mnt_tmptgt_unshare(int *old_ns_fd); extern int mnt_tmptgt_cleanup(int old_ns_fd); diff --git a/libmount/src/tab.c b/libmount/src/tab.c index a7da09481c..d8b239b305 100644 --- a/libmount/src/tab.c +++ b/libmount/src/tab.c @@ -1010,7 +1010,6 @@ struct libmnt_fs *mnt_table_find_mountpoint(struct libmnt_table *tb, int direction) { char *mnt; - struct stat st; if (!tb || !path || !*path) return NULL; @@ -1019,7 +1018,7 @@ struct libmnt_fs *mnt_table_find_mountpoint(struct libmnt_table *tb, DBG(TAB, ul_debugobj(tb, "lookup MOUNTPOINT: '%s'", path)); - if (mnt_stat_mountpoint(path, &st)) + if (!mnt_is_path(path)) return NULL; mnt = strdup(path); diff --git a/libmount/src/utils.c b/libmount/src/utils.c index 26c5aef7b1..e4347f3ea9 100644 --- a/libmount/src/utils.c +++ b/libmount/src/utils.c @@ -118,6 +118,14 @@ int mnt_lstat_mountpoint(const char *target, struct stat *st) #endif } +/* Don't use access() or stat() here, we need a way how to check the path + * without trigger an automount or hangs on NFS, etc. */ +int mnt_is_path(const char *target) +{ + struct stat st; + + return mnt_stat_mountpoint(target, &st) == 0; +} /* * Note that the @target has to be an absolute path (so at least "/"). The