summaryrefslogtreecommitdiff
path: root/src/basic
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-06-05 16:02:32 +0200
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commite515de190d11d311f5de6153773100aef8d45964 (patch)
tree0ad088fdc2f56bae1dfb4587254b3bfa0d6687e8 /src/basic
parent83e6d192cbe160dbea62427bab0f6f7d490ce215 (diff)
util: add new write_string_filef() helper
This new helper combines asprintf() and write_string_file() in one, which is useful at various places to shorten the code a bit.
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/capability-util.c16
-rw-r--r--src/basic/fileio.c19
-rw-r--r--src/basic/fileio.h2
3 files changed, 25 insertions, 12 deletions
diff --git a/src/basic/capability-util.c b/src/basic/capability-util.c
index 4409482b6..911f62b35 100644
--- a/src/basic/capability-util.c
+++ b/src/basic/capability-util.c
@@ -231,10 +231,10 @@ finish:
}
static int drop_from_file(const char *fn, uint64_t keep) {
- int r, k;
- uint32_t hi, lo;
+ _cleanup_free_ char *p = NULL;
uint64_t current, after;
- char *p;
+ uint32_t hi, lo;
+ int r, k;
r = read_one_line_file(fn, &p);
if (r < 0)
@@ -244,8 +244,6 @@ static int drop_from_file(const char *fn, uint64_t keep) {
assert_cc(sizeof(lo) == sizeof(unsigned));
k = sscanf(p, "%u %u", &lo, &hi);
- free(p);
-
if (k != 2)
return -EIO;
@@ -258,13 +256,7 @@ static int drop_from_file(const char *fn, uint64_t keep) {
lo = (unsigned) (after & 0xFFFFFFFFULL);
hi = (unsigned) ((after >> 32ULL) & 0xFFFFFFFFULL);
- if (asprintf(&p, "%u %u", lo, hi) < 0)
- return -ENOMEM;
-
- r = write_string_file(fn, p, WRITE_STRING_FILE_CREATE);
- free(p);
-
- return r;
+ return write_string_filef(fn, WRITE_STRING_FILE_CREATE, "%u %u", lo, hi);
}
int capability_bounding_set_drop_usermode(uint64_t keep) {
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 245402f6d..3ed796edf 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -206,6 +206,25 @@ fail:
return 0;
}
+int write_string_filef(
+ const char *fn,
+ WriteStringFileFlags flags,
+ const char *format, ...) {
+
+ _cleanup_free_ char *p = NULL;
+ va_list ap;
+ int r;
+
+ va_start(ap, format);
+ r = vasprintf(&p, format, ap);
+ va_end(ap);
+
+ if (r < 0)
+ return -ENOMEM;
+
+ return write_string_file(fn, p, flags);
+}
+
int read_one_line_file(const char *fn, char **line) {
_cleanup_fclose_ FILE *f = NULL;
int r;
diff --git a/src/basic/fileio.h b/src/basic/fileio.h
index ee17f4091..7a413d626 100644
--- a/src/basic/fileio.h
+++ b/src/basic/fileio.h
@@ -39,6 +39,8 @@ static inline int write_string_file(const char *fn, const char *line, WriteStrin
return write_string_file_ts(fn, line, flags, NULL);
}
+int write_string_filef(const char *fn, WriteStringFileFlags flags, const char *format, ...) _printf_(3, 4);
+
int read_one_line_file(const char *fn, char **line);
int read_full_file(const char *fn, char **contents, size_t *size);
int read_full_stream(FILE *f, char **contents, size_t *size);