diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-04-04 11:02:11 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-04-12 11:44:56 +0200 |
commit | 41f6e627d7cfdf1ea50d5adbd7e118589dbcf8db (patch) | |
tree | 979f9a42211a4abbad46950b6e069d3f109f68de /src/shared/generator.c | |
parent | fdeea3f4f1c0f78f1014582135d047265098fb82 (diff) | |
download | systemd-41f6e627d7cfdf1ea50d5adbd7e118589dbcf8db.tar.gz |
Make fopen_temporary and fopen_temporary_label unlocked
This is partially a refactoring, but also makes many more places use
unlocked operations implicitly, i.e. all users of fopen_temporary().
AFAICT, the uses are always for short-lived files which are not shared
externally, and are just used within the same context. Locking is not
necessary.
Diffstat (limited to 'src/shared/generator.c')
-rw-r--r-- | src/shared/generator.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/shared/generator.c b/src/shared/generator.c index ed7f037e91..403c2a6737 100644 --- a/src/shared/generator.c +++ b/src/shared/generator.c @@ -1,7 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ #include <errno.h> -#include <stdio_ext.h> #include <unistd.h> #include "alloc-util.h" @@ -30,23 +29,22 @@ int generator_open_unit_file( const char *unit; FILE *f; + int r; unit = strjoina(dest, "/", name); - f = fopen(unit, "wxe"); - if (!f) { - if (source && errno == EEXIST) - return log_error_errno(errno, + r = fopen_unlocked(unit, "wxe", &f); + if (r < 0) { + if (source && r == -EEXIST) + return log_error_errno(r, "Failed to create unit file %s, as it already exists. Duplicate entry in %s?", unit, source); else - return log_error_errno(errno, + return log_error_errno(r, "Failed to create unit file %s: %m", unit); } - (void) __fsetlocking(f, FSETLOCKING_BYCALLER); - fprintf(f, "# Automatically generated by %s\n\n", program_invocation_short_name); |