From: Lennart Poettering Date: Mon, 7 Jul 2014 10:05:41 +0000 (+0200) Subject: fileio: simplify write_env_file() X-Git-Tag: v216~742 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=736937e5aab60888f0bd2ca75674105f7b7fd0f0 fileio: simplify write_env_file() --- diff --git a/src/shared/fileio.c b/src/shared/fileio.c index b1de5908c..b0ab780d7 100644 --- a/src/shared/fileio.c +++ b/src/shared/fileio.c @@ -756,35 +756,31 @@ static void write_env_var(FILE *f, const char *v) { } int write_env_file(const char *fname, char **l) { - char **i; - _cleanup_free_ char *p = NULL; _cleanup_fclose_ FILE *f = NULL; + _cleanup_free_ char *p = NULL; + char **i; int r; + assert(fname); + r = fopen_temporary(fname, &f, &p); if (r < 0) return r; fchmod_umask(fileno(f), 0644); - errno = 0; STRV_FOREACH(i, l) write_env_var(f, *i); - fflush(f); + r = fflush_and_check(f); + if (r >= 0) { + if (rename(p, fname) >= 0) + return 0; - if (ferror(f)) - r = errno ? -errno : -EIO; - else { - if (rename(p, fname) < 0) - r = -errno; - else - r = 0; + r = -errno; } - if (r < 0) - unlink(p); - + unlink(p); return r; }