fputc_unlocked('\n', f);
}
-int write_env_file_at(int dir_fd, const char *fname, char **l) {
+int write_env_file(int dir_fd, const char *fname, char **headers, char **l) {
_cleanup_fclose_ FILE *f = NULL;
_cleanup_free_ char *p = NULL;
int r;
(void) fchmod_umask(fileno(f), 0644);
+ STRV_FOREACH(i, headers) {
+ assert(isempty(*i) || startswith(*i, "#"));
+ fputs_unlocked(*i, f);
+ fputc_unlocked('\n', f);
+ }
+
STRV_FOREACH(i, l)
write_env_var(f, *i);
int merge_env_file(char ***env, FILE *f, const char *fname);
-int write_env_file_at(int dir_fd, const char *fname, char **l);
-static inline int write_env_file(const char *fname, char **l) {
- return write_env_file_at(AT_FDCWD, fname, l);
-}
+int write_env_file(int dir_fd, const char *fname, char **headers, char **l);
locales[i] = NULL;
- r = write_env_file_at(pfd, f, locales);
+ r = write_env_file(pfd, f, NULL, locales);
if (r < 0)
return log_error_errno(r, "Failed to write /etc/locale.conf: %m");
keymap = STRV_MAKE(strjoina("KEYMAP=", arg_keymap));
- r = write_env_file_at(pfd, f, keymap);
+ r = write_env_file(pfd, f, NULL, keymap);
if (r < 0)
return log_error_errno(r, "Failed to write /etc/vconsole.conf: %m");
return 0;
}
- r = write_env_file_label("/etc/machine-info", l);
+ r = write_env_file_label(AT_FDCWD, "/etc/machine-info", NULL, l);
if (r < 0)
return r;
return 0;
}
- r = write_env_file_label("/etc/vconsole.conf", l);
+ r = write_env_file_label(AT_FDCWD, "/etc/vconsole.conf", NULL, l);
if (r < 0)
return r;
#include "env-file.h"
#include "selinux-util.h"
-int write_env_file_label(const char *fname, char **l) {
+int write_env_file_label(int dir_fd, const char *fname, char **headers, char **l) {
int r;
r = mac_selinux_create_file_prepare(fname, S_IFREG);
if (r < 0)
return r;
- r = write_env_file(fname, l);
+ r = write_env_file(dir_fd, fname, headers, l);
mac_selinux_create_file_clear();
* optimize linking: This way, -lselinux is needed only for the callers of these functions that need selinux, but not
* for all */
-int write_env_file_label(const char *fname, char **l);
+int write_env_file_label(int dir_fd, const char *fname, char **headers, char **l);
return 0;
}
- r = write_env_file_label("/etc/locale.conf", set);
+ r = write_env_file_label(AT_FDCWD, "/etc/locale.conf", NULL, set);
if (r < 0)
return r;
assert_se(tempfn_random_child(NULL, NULL, &p) >= 0);
assert_se(j = strjoin("TEST=", v));
- assert_se(write_env_file(p, STRV_MAKE(j)) >= 0);
+ assert_se(write_env_file(AT_FDCWD, p, STRV_MAKE("# header 1", "", "# header 2"), STRV_MAKE(j)) >= 0);
assert_se(cmd = strjoin(". ", p, " && /bin/echo -n \"$TEST\""));
assert_se(f = popen(cmd, "re"));
assert_se(fd >= 0);
}
- r = write_env_file(p, a);
+ r = write_env_file(AT_FDCWD, p, NULL, a);
assert_se(r >= 0);
r = load_env_file(NULL, p, &b);
assert_se(fd >= 0);
}
- r = write_env_file(p, a);
+ r = write_env_file(AT_FDCWD, p, NULL, a);
assert_se(r >= 0);
r = load_env_file(NULL, p, &b);