From 655d736da3040e9cd89b3ece275e27ff2c13b6b5 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Wed, 8 Jul 2020 08:50:07 +0200 Subject: [PATCH] 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 --- include/path.h | 1 + lib/path.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/path.h b/include/path.h index a9bab6dbe..2a4f80ecd 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 64bf7c6f0..75fa85305 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);