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);