recurse-dir: add new readdir_all_at() helper

This new helper combines open() with readdir_all() to simplify a few
callers.
This commit is contained in:
Lennart Poettering
2023-12-06 22:12:48 +01:00
parent f08d1fea30
commit 4d56442755
4 changed files with 16 additions and 12 deletions
+13
View File
@@ -4,6 +4,7 @@
#include "dirent-util.h"
#include "fd-util.h"
#include "fileio.h"
#include "fs-util.h"
#include "missing_syscall.h"
#include "mountpoint-util.h"
#include "recurse-dir.h"
@@ -132,6 +133,18 @@ int readdir_all(int dir_fd,
return 0;
}
int readdir_all_at(int fd, const char *path, RecurseDirFlags flags, DirectoryEntries **ret) {
_cleanup_close_ int dir_fd = -EBADF;
assert(fd >= 0 || fd == AT_FDCWD);
dir_fd = xopenat(fd, path, O_DIRECTORY|O_CLOEXEC, /* xopen_flags= */ 0, /* mode= */ 0);
if (dir_fd < 0)
return dir_fd;
return readdir_all(dir_fd, flags, ret);
}
int recurse_dir(
int dir_fd,
const char *path,
+1
View File
@@ -76,6 +76,7 @@ typedef struct DirectoryEntries {
} DirectoryEntries;
int readdir_all(int dir_fd, RecurseDirFlags flags, DirectoryEntries **ret);
int readdir_all_at(int fd, const char *path, RecurseDirFlags flags, DirectoryEntries **ret);
int recurse_dir(int dir_fd, const char *path, unsigned statx_mask, unsigned n_depth_max, RecurseDirFlags flags, recurse_dir_func_t func, void *userdata);
int recurse_dir_at(int atfd, const char *path, unsigned statx_mask, unsigned n_depth_max, RecurseDirFlags flags, recurse_dir_func_t func, void *userdata);