]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: introduce read_one_line_file_at()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 8 Apr 2023 17:41:26 +0000 (02:41 +0900)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 9 Apr 2023 05:08:38 +0000 (07:08 +0200)
src/basic/fileio.c
src/basic/fileio.h

index 340f9b48607bc66833a63d9e4b5897ac0d71c491..2eefaf0428e2078a402e1c32b3ded23023043940 100644 (file)
@@ -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) {
index 0a88a19146f947ceb3b223a059454e5472497f16..8901a43c419425f2e4acce23bfc0bebcd816f7e2 100644 (file)
@@ -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);