mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
basic/fileio: minor modernization for xopendirat()
This commit is contained in:
parent
3ca09aa4dd
commit
c0cf1c5826
@ -957,19 +957,21 @@ int get_proc_field(const char *filename, const char *pattern, const char *termin
|
||||
return 0;
|
||||
}
|
||||
|
||||
DIR *xopendirat(int fd, const char *name, int flags) {
|
||||
_cleanup_close_ int nfd = -EBADF;
|
||||
DIR* xopendirat(int dir_fd, const char *name, int flags) {
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
|
||||
assert(!(flags & O_CREAT));
|
||||
assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
|
||||
assert(name);
|
||||
assert(!(flags & (O_CREAT|O_TMPFILE)));
|
||||
|
||||
if (fd == AT_FDCWD && flags == 0)
|
||||
if (dir_fd == AT_FDCWD && flags == 0)
|
||||
return opendir(name);
|
||||
|
||||
nfd = openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags, 0);
|
||||
if (nfd < 0)
|
||||
fd = openat(dir_fd, name, O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags);
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
|
||||
return take_fdopendir(&nfd);
|
||||
return take_fdopendir(&fd);
|
||||
}
|
||||
|
||||
int fopen_mode_to_flags(const char *mode) {
|
||||
|
@ -98,7 +98,7 @@ int executable_is_script(const char *path, char **interpreter);
|
||||
|
||||
int get_proc_field(const char *filename, const char *pattern, const char *terminator, char **field);
|
||||
|
||||
DIR *xopendirat(int dirfd, const char *name, int flags);
|
||||
DIR* xopendirat(int dir_fd, const char *name, int flags);
|
||||
|
||||
typedef enum XfopenFlags {
|
||||
XFOPEN_UNLOCKED = 1 << 0, /* call __fsetlocking(FSETLOCKING_BYCALLER) after opened */
|
||||
@ -148,6 +148,14 @@ typedef enum ReadLineFlags {
|
||||
} ReadLineFlags;
|
||||
|
||||
int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret);
|
||||
static inline int read_line(FILE *f, size_t limit, char **ret) {
|
||||
return read_line_full(f, limit, 0, ret);
|
||||
}
|
||||
static inline int read_nul_string(FILE *f, size_t limit, char **ret) {
|
||||
return read_line_full(f, limit, READ_LINE_ONLY_NUL, ret);
|
||||
}
|
||||
|
||||
int read_stripped_line(FILE *f, size_t limit, char **ret);
|
||||
|
||||
static inline bool file_offset_beyond_memory_size(off_t x) {
|
||||
if (x < 0) /* off_t is signed, filter that out */
|
||||
@ -155,16 +163,6 @@ static inline bool file_offset_beyond_memory_size(off_t x) {
|
||||
return (uint64_t) x > (uint64_t) SIZE_MAX;
|
||||
}
|
||||
|
||||
static inline int read_line(FILE *f, size_t limit, char **ret) {
|
||||
return read_line_full(f, limit, 0, ret);
|
||||
}
|
||||
|
||||
static inline int read_nul_string(FILE *f, size_t limit, char **ret) {
|
||||
return read_line_full(f, limit, READ_LINE_ONLY_NUL, ret);
|
||||
}
|
||||
|
||||
int read_stripped_line(FILE *f, size_t limit, char **ret);
|
||||
|
||||
int safe_fgetc(FILE *f, char *ret);
|
||||
|
||||
int warn_file_is_world_accessible(const char *filename, struct stat *st, const char *unit, unsigned line);
|
||||
|
Loading…
Reference in New Issue
Block a user