summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-04-09 02:41:26 +0900
committerDaan De Meyer <daan.j.demeyer@gmail.com>2023-04-09 07:08:38 +0200
commit46b457e54bd74fb7589bef529a7e42e980ffd777 (patch)
tree02f0c7d7690e8794cc9cacd16f51cfae96477362
parent728d7382a0dbd920bef347918eaefe9aadb01401 (diff)
downloadsystemd-46b457e54bd74fb7589bef529a7e42e980ffd777.tar.gz
fileio: introduce read_one_line_file_at()
-rw-r--r--src/basic/fileio.c11
-rw-r--r--src/basic/fileio.h5
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);