fileio: add 'dir_fd' parameter to read_full_file_full()

Let's introduce an "at" version of read_full_file().
This commit is contained in:
Lennart Poettering
2019-12-02 09:47:00 +01:00
parent 0a38e6b9a3
commit 8241f785f4
4 changed files with 9 additions and 6 deletions
+4 -2
View File
@@ -543,17 +543,19 @@ finalize:
return r;
}
int read_full_file_full(const char *filename, ReadFullFileFlags flags, char **contents, size_t *size) {
int read_full_file_full(int dir_fd, const char *filename, ReadFullFileFlags flags, char **contents, size_t *size) {
_cleanup_fclose_ FILE *f = NULL;
int r;
assert(filename);
assert(contents);
r = fopen_unlocked(filename, "re", &f);
r = xfopenat(dir_fd, filename, "re", 0, &f);
if (r < 0)
return r;
(void) __fsetlocking(f, FSETLOCKING_BYCALLER);
return read_full_stream_full(f, filename, flags, contents, size);
}
+3 -2
View File
@@ -6,6 +6,7 @@
#include <stddef.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <sys/types.h>
#include "macro.h"
@@ -52,9 +53,9 @@ 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_full_file_full(const char *filename, ReadFullFileFlags flags, char **contents, size_t *size);
int read_full_file_full(int dir_fd, const char *filename, ReadFullFileFlags flags, char **contents, size_t *size);
static inline int read_full_file(const char *filename, char **contents, size_t *size) {
return read_full_file_full(filename, 0, contents, size);
return read_full_file_full(AT_FDCWD, filename, 0, contents, size);
}
int read_full_virtual_file(const char *filename, char **ret_contents, size_t *ret_size);
int read_full_stream_full(FILE *f, const char *filename, ReadFullFileFlags flags, char **contents, size_t *size);