]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/path: add ul_path_is_accessible()
authorKarel Zak <kzak@redhat.com>
Wed, 8 Jul 2020 06:50:07 +0000 (08:50 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 8 Jul 2020 06:50:07 +0000 (08:50 +0200)
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 <kzak@redhat.com>
include/path.h
lib/path.c

index a9bab6dbe075616629314d7e64d504ce397191a3..2a4f80ecd4757f766e752aa9ae10c2a4a102cc1d 100644 (file)
@@ -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)));
index 64bf7c6f02d1ce311029bc75c012699f6b064962..75fa853058468fddd987c0ad892fb6ff50f51828 100644 (file)
@@ -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);