diff options
| -rw-r--r-- | include/path.h | 2 | ||||
| -rw-r--r-- | lib/path.c | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/include/path.h b/include/path.h index 3ce70c40b2..22cd544815 100644 --- a/include/path.h +++ b/include/path.h @@ -128,6 +128,8 @@ int ul_path_count_dirents(struct path_cxt *pc, const char *path); int ul_path_countf_dirents(struct path_cxt *pc, const char *path, ...) __attribute__ ((__format__ (__printf__, 2, 3))); +int ul_path_next_dirent(struct path_cxt *pc, DIR **sub, const char *dirname, struct dirent **d); + FILE *ul_prefix_fopen(const char *prefix, const char *path, const char *mode); diff --git a/lib/path.c b/lib/path.c index cf3a33e046..0d357966f3 100644 --- a/lib/path.c +++ b/lib/path.c @@ -968,6 +968,27 @@ int ul_path_countf_dirents(struct path_cxt *pc, const char *path, ...) return !p ? -errno : ul_path_count_dirents(pc, p); } +/* first call (when @sub is NULL) opens the directory, last call closes the diretory */ +int ul_path_next_dirent(struct path_cxt *pc, DIR **sub, const char *dirname, struct dirent **d) +{ + if (!pc || !sub || !d) + return -EINVAL; + + if (!*sub) { + *sub = ul_path_opendir(pc, dirname); + if (!*sub) + return -errno; + } + + *d = xreaddir(*sub); + if (*d) + return 0; + + closedir(*sub); + *sub = NULL; + return 1; +} + /* * Like fopen() but, @path is always prefixed by @prefix. This function is * useful in case when ul_path_* API is overkill. |
