int write_env_file(const char *fname, char **l) { char **i; _cleanup_free_ char *p = NULL; _cleanup_fclose_ FILE *f = NULL; int r; 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); if (ferror(f)) r = errno ? -errno : -EIO; else { if (rename(p, fname) < 0) r = -errno; else r = 0; } if (r < 0) unlink(p); return r; }
int write_env_file(const char *fname, char **l) { _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); STRV_FOREACH(i, l) write_env_var(f, *i); r = fflush_and_check(f); if (r >= 0) { if (rename(p, fname) >= 0) return 0; r = -errno; } unlink(p); return r; }