mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
fileio: modernize xopendirat() a bit
This commit is contained in:
@@ -842,7 +842,7 @@ int chase_and_opendir(const char *path, const char *root, ChaseFlags chase_flags
|
||||
return r;
|
||||
assert(path_fd >= 0);
|
||||
|
||||
d = xopendirat(path_fd, ".", O_NOFOLLOW);
|
||||
d = xopendirat(path_fd, /* path= */ NULL, /* flags= */ 0);
|
||||
if (!d)
|
||||
return -errno;
|
||||
|
||||
@@ -1045,7 +1045,7 @@ int chase_and_opendirat(int dir_fd, const char *path, ChaseFlags chase_flags, ch
|
||||
return r;
|
||||
assert(path_fd >= 0);
|
||||
|
||||
d = xopendirat(path_fd, ".", O_NOFOLLOW);
|
||||
d = xopendirat(path_fd, /* path= */ NULL, /* flags= */ 0);
|
||||
if (!d)
|
||||
return -errno;
|
||||
|
||||
|
||||
@@ -928,17 +928,22 @@ int get_proc_field(const char *path, const char *key, char **ret) {
|
||||
}
|
||||
}
|
||||
|
||||
DIR* xopendirat(int dir_fd, const char *name, int flags) {
|
||||
DIR* xopendirat(int dir_fd, const char *path, int flags) {
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
|
||||
assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
|
||||
assert(name);
|
||||
assert(!(flags & (O_CREAT|O_TMPFILE)));
|
||||
|
||||
if (dir_fd == AT_FDCWD && flags == 0)
|
||||
return opendir(name);
|
||||
if ((dir_fd == AT_FDCWD || path_is_absolute(path)) &&
|
||||
(flags &~ O_DIRECTORY) == 0)
|
||||
return opendir(path);
|
||||
|
||||
fd = openat(dir_fd, name, O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags);
|
||||
if (isempty(path)) {
|
||||
path = ".";
|
||||
flags |= O_NOFOLLOW;
|
||||
}
|
||||
|
||||
fd = openat(dir_fd, path, O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags);
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ int script_get_shebang_interpreter(const char *path, char **ret);
|
||||
|
||||
int get_proc_field(const char *path, const char *key, char **ret);
|
||||
|
||||
DIR* xopendirat(int dir_fd, const char *name, int flags);
|
||||
DIR* xopendirat(int dir_fd, const char *path, int flags);
|
||||
|
||||
typedef enum XfopenFlags {
|
||||
XFOPEN_UNLOCKED = 1 << 0, /* call __fsetlocking(FSETLOCKING_BYCALLER) after opened */
|
||||
|
||||
@@ -190,7 +190,7 @@ static int stack_directory_find_prioritized_devnode(sd_device *dev, int dirfd, b
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
dir = xopendirat(dirfd, ".", O_NOFOLLOW);
|
||||
dir = xopendirat(dirfd, /* path= */ NULL, /* flags= */ 0);
|
||||
if (!dir)
|
||||
return -errno;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user