summaryrefslogtreecommitdiffstats
path: root/src/basic/fileio.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-04-04 10:17:16 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-04-12 11:44:52 +0200
commitfdeea3f4f1c0f78f1014582135d047265098fb82 (patch)
treed0d0f329f5b7dedd3c781cf64f0f468105e3befb /src/basic/fileio.c
parentMerge pull request #12267 from keszybz/udev-settle-warning (diff)
downloadsystemd-fdeea3f4f1c0f78f1014582135d047265098fb82.tar.xz
systemd-fdeea3f4f1c0f78f1014582135d047265098fb82.zip
Add fopen_unlocked() wrapper
Diffstat (limited to 'src/basic/fileio.c')
-rw-r--r--src/basic/fileio.c40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 9ab2f501c7..4599440b45 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -29,6 +29,19 @@
#define READ_FULL_BYTES_MAX (4U*1024U*1024U)
+int fopen_unlocked(const char *path, const char *options, FILE **ret) {
+ assert(ret);
+
+ FILE *f = fopen(path, options);
+ if (!f)
+ return -errno;
+
+ (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+
+ *ret = f;
+ return 0;
+}
+
int write_string_stream_ts(
FILE *f,
const char *line,
@@ -213,15 +226,14 @@ int write_string_filef(
int read_one_line_file(const char *fn, char **line) {
_cleanup_fclose_ FILE *f = NULL;
+ int r;
assert(fn);
assert(line);
- f = fopen(fn, "re");
- if (!f)
- return -errno;
-
- (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+ r = fopen_unlocked(fn, "re", &f);
+ if (r < 0)
+ return r;
return read_line(f, LONG_LINE_MAX, line);
}
@@ -230,6 +242,7 @@ int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
_cleanup_fclose_ FILE *f = NULL;
_cleanup_free_ char *buf = NULL;
size_t l, k;
+ int r;
assert(fn);
assert(blob);
@@ -243,11 +256,9 @@ int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
if (!buf)
return -ENOMEM;
- f = fopen(fn, "re");
- if (!f)
- return -errno;
-
- (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+ r = fopen_unlocked(fn, "re", &f);
+ if (r < 0)
+ return r;
/* We try to read one byte more than we need, so that we know whether we hit eof */
errno = 0;
@@ -390,15 +401,14 @@ finalize:
int read_full_file_full(const char *filename, ReadFullFileFlags flags, char **contents, size_t *size) {
_cleanup_fclose_ FILE *f = NULL;
+ int r;
assert(filename);
assert(contents);
- f = fopen(filename, "re");
- if (!f)
- return -errno;
-
- (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+ r = fopen_unlocked(filename, "re", &f);
+ if (r < 0)
+ return r;
return read_full_stream_full(f, filename, flags, contents, size);
}