diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-04-09 02:41:26 +0900 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2023-04-09 07:08:38 +0200 |
commit | 46b457e54bd74fb7589bef529a7e42e980ffd777 (patch) | |
tree | 02f0c7d7690e8794cc9cacd16f51cfae96477362 | |
parent | 728d7382a0dbd920bef347918eaefe9aadb01401 (diff) | |
download | systemd-46b457e54bd74fb7589bef529a7e42e980ffd777.tar.gz |
fileio: introduce read_one_line_file_at()
-rw-r--r-- | src/basic/fileio.c | 11 | ||||
-rw-r--r-- | src/basic/fileio.h | 5 |
2 files changed, 10 insertions, 6 deletions
diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 340f9b4860..2eefaf0428 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -354,18 +354,19 @@ int write_string_filef( return write_string_file(fn, p, flags); } -int read_one_line_file(const char *fn, char **line) { +int read_one_line_file_at(int dir_fd, const char *filename, char **ret) { _cleanup_fclose_ FILE *f = NULL; int r; - assert(fn); - assert(line); + assert(dir_fd >= 0 || dir_fd == AT_FDCWD); + assert(filename); + assert(ret); - r = fopen_unlocked(fn, "re", &f); + r = fopen_unlocked_at(dir_fd, filename, "re", 0, &f); if (r < 0) return r; - return read_line(f, LONG_LINE_MAX, line); + return read_line(f, LONG_LINE_MAX, ret); } int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_extra_nl) { diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 0a88a19146..8901a43c41 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -71,7 +71,10 @@ static inline int write_string_file(const char *fn, const char *line, WriteStrin int write_string_filef(const char *fn, WriteStringFileFlags flags, const char *format, ...) _printf_(3, 4); -int read_one_line_file(const char *filename, char **line); +int read_one_line_file_at(int dir_fd, const char *filename, char **ret); +static inline int read_one_line_file(const char *filename, char **ret) { + return read_one_line_file_at(AT_FDCWD, filename, ret); +} int read_full_file_full(int dir_fd, const char *filename, uint64_t offset, size_t size, ReadFullFileFlags flags, const char *bind_name, char **ret_contents, size_t *ret_size); static inline int read_full_file_at(int dir_fd, const char *filename, char **ret_contents, size_t *ret_size) { return read_full_file_full(dir_fd, filename, UINT64_MAX, SIZE_MAX, 0, NULL, ret_contents, ret_size); |