From: Karel Zak Date: Wed, 8 Jul 2020 06:50:07 +0000 (+0200) Subject: lib/path: add ul_path_is_accessible() X-Git-Tag: v2.36-rc2~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=655d736da3040e9cd89b3ece275e27ff2c13b6b5;p=thirdparty%2Futil-linux.git lib/path: add ul_path_is_accessible() This function allow to check that path_cxt is usable. Note that ul_new_path() does not open the path. Signed-off-by: Karel Zak --- diff --git a/include/path.h b/include/path.h index a9bab6dbe0..2a4f80ecd4 100644 --- a/include/path.h +++ b/include/path.h @@ -42,6 +42,7 @@ int ul_path_set_enoent_redirect(struct path_cxt *pc, int (*func)(struct path_cxt int ul_path_get_dirfd(struct path_cxt *pc); void ul_path_close_dirfd(struct path_cxt *pc); int ul_path_isopen_dirfd(struct path_cxt *pc); +int ul_path_is_accessible(struct path_cxt *pc); char *ul_path_get_abspath(struct path_cxt *pc, char *buf, size_t bufsz, const char *path, ...) __attribute__ ((__format__ (__printf__, 4, 5))); diff --git a/lib/path.c b/lib/path.c index 64bf7c6f02..75fa853058 100644 --- a/lib/path.c +++ b/lib/path.c @@ -195,6 +195,20 @@ static const char *get_absdir(struct path_cxt *pc) return pc->path_buffer; } +int ul_path_is_accessible(struct path_cxt *pc) +{ + const char *path; + assert(pc); + + if (pc->dir_fd >= 0) + return 1; + + path = get_absdir(pc); + if (!path) + return 0; + return access(path, F_OK) == 0; +} + int ul_path_get_dirfd(struct path_cxt *pc) { assert(pc);