diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 45c0b4a840..6c8305c2f8 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -710,7 +710,7 @@ int parse_env_filev( return n_pushed; } -int parse_env_file( +int parse_env_file_sentinel( FILE *f, const char *fname, ...) { diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 66d9582ee7..8be593512d 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -43,7 +43,8 @@ int read_full_stream(FILE *f, char **contents, size_t *size); int verify_file(const char *fn, const char *blob, bool accept_extra_nl); int parse_env_filev(FILE *f, const char *fname, va_list ap); -int parse_env_file(FILE *f, const char *fname, ...) _sentinel_; +int parse_env_file_sentinel(FILE *f, const char *fname, ...) _sentinel_; +#define parse_env_file(f, fname, ...) parse_env_file_sentinel(f, fname, __VA_ARGS__, NULL) int load_env_file(FILE *f, const char *fname, char ***l); int load_env_file_pairs(FILE *f, const char *fname, char ***l); diff --git a/src/basic/util.c b/src/basic/util.c index b860753756..cd75529cfe 100644 --- a/src/basic/util.c +++ b/src/basic/util.c @@ -248,7 +248,9 @@ int container_get_leader(const char *machine, pid_t *pid) { return -EINVAL; p = strjoina("/run/systemd/machines/", machine); - r = parse_env_file(NULL, p, "LEADER", &s, "CLASS", &class, NULL); + r = parse_env_file(NULL, p, + "LEADER", &s, + "CLASS", &class); if (r == -ENOENT) return -EHOSTDOWN; if (r < 0) diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c index e13f21f90f..64fddca48c 100644 --- a/src/core/locale-setup.c +++ b/src/core/locale-setup.c @@ -54,9 +54,7 @@ int locale_setup(char ***environment) { "LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], "LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], "LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], - "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], - NULL); - + "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]); if (r < 0 && r != -ENOENT) log_warning_errno(r, "Failed to read /etc/locale.conf: %m"); } diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index b8facaf47d..4cbf2bde8b 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -94,8 +94,7 @@ static int context_read_data(Context *c) { "ICON_NAME", &c->data[PROP_ICON_NAME], "CHASSIS", &c->data[PROP_CHASSIS], "DEPLOYMENT", &c->data[PROP_DEPLOYMENT], - "LOCATION", &c->data[PROP_LOCATION], - NULL); + "LOCATION", &c->data[PROP_LOCATION]); if (r < 0 && r != -ENOENT) return r; diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index 0fa915f4c3..b91d520cf0 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -149,10 +149,7 @@ static int load_cursor_state(Uploader *u) { if (!u->state_file) return 0; - r = parse_env_file(NULL, u->state_file, - "LAST_CURSOR", &u->last_cursor, - NULL); - + r = parse_env_file(NULL, u->state_file, "LAST_CURSOR", &u->last_cursor); if (r == -ENOENT) log_debug("State file %s is not present.", u->state_file); else if (r < 0) diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c index ca102010bc..81aa7bd99f 100644 --- a/src/journal/journald-stream.c +++ b/src/journal/journald-stream.c @@ -659,8 +659,7 @@ static int stdout_stream_load(StdoutStream *stream, const char *fname) { "FORWARD_TO_CONSOLE", &forward_to_console, "IDENTIFIER", &stream->identifier, "UNIT", &stream->unit_id, - "STREAM_ID", &stream_id, - NULL); + "STREAM_ID", &stream_id); if (r < 0) return log_error_errno(r, "Failed to read: %s", stream->state_file); diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index dd556d01d6..1edabbde72 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1888,7 +1888,9 @@ _public_ int sd_journal_open_container(sd_journal **ret, const char *machine, in assert_return(machine_name_is_valid(machine), -EINVAL); p = strjoina("/run/systemd/machines/", machine); - r = parse_env_file(NULL, p, "ROOT", &root, "CLASS", &class, NULL); + r = parse_env_file(NULL, p, + "ROOT", &root, + "CLASS", &class); if (r == -ENOENT) return -EHOSTDOWN; if (r < 0) diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 8fe468d468..a90c01d7db 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -1067,8 +1067,7 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { "OPTION_251", &options[27], "OPTION_252", &options[28], "OPTION_253", &options[29], - "OPTION_254", &options[30], - NULL); + "OPTION_254", &options[30]); if (r < 0) return r; diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index b5ef781b40..e048d2ce18 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -258,8 +258,7 @@ static int file_of_uid(uid_t uid, char **p) { } _public_ int sd_uid_get_state(uid_t uid, char**state) { - _cleanup_free_ char *p = NULL; - char *s = NULL; + _cleanup_free_ char *p = NULL, *s = NULL; int r; assert_return(state, -EINVAL); @@ -268,24 +267,17 @@ _public_ int sd_uid_get_state(uid_t uid, char**state) { if (r < 0) return r; - r = parse_env_file(NULL, p, "STATE", &s, NULL); + r = parse_env_file(NULL, p, "STATE", &s); if (r == -ENOENT) { - free(s); - s = strdup("offline"); - if (!s) - return -ENOMEM; - - } - else if (r < 0) { - free(s); + r = free_and_strdup(&s, "offline"); + if (r < 0) + return r; + } else if (r < 0) return r; - } - if (isempty(s)) { - free(s); + else if (isempty(s)) return -EIO; - } - *state = s; + *state = TAKE_PTR(s); return 0; } @@ -299,7 +291,7 @@ _public_ int sd_uid_get_display(uid_t uid, char **session) { if (r < 0) return r; - r = parse_env_file(NULL, p, "DISPLAY", &s, NULL); + r = parse_env_file(NULL, p, "DISPLAY", &s); if (r == -ENOENT) return -ENODATA; if (r < 0) @@ -354,7 +346,7 @@ _public_ int sd_uid_is_on_seat(uid_t uid, int require_active, const char *seat) variable = require_active ? "ACTIVE_UID" : "UIDS"; - r = parse_env_file(NULL, p, variable, &s, NULL); + r = parse_env_file(NULL, p, variable, &s); if (r == -ENOENT) return 0; if (r < 0) @@ -383,7 +375,7 @@ static int uid_get_array(uid_t uid, const char *variable, char ***array) { if (r < 0) return r; - r = parse_env_file(NULL, p, variable, &s, NULL); + r = parse_env_file(NULL, p, variable, &s); if (r == -ENOENT || (r >= 0 && isempty(s))) { if (array) *array = NULL; @@ -461,7 +453,7 @@ _public_ int sd_session_is_active(const char *session) { if (r < 0) return r; - r = parse_env_file(NULL, p, "ACTIVE", &s, NULL); + r = parse_env_file(NULL, p, "ACTIVE", &s); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -480,7 +472,7 @@ _public_ int sd_session_is_remote(const char *session) { if (r < 0) return r; - r = parse_env_file(NULL, p, "REMOTE", &s, NULL); + r = parse_env_file(NULL, p, "REMOTE", &s); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -501,7 +493,7 @@ _public_ int sd_session_get_state(const char *session, char **state) { if (r < 0) return r; - r = parse_env_file(NULL, p, "STATE", &s, NULL); + r = parse_env_file(NULL, p, "STATE", &s); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -524,7 +516,7 @@ _public_ int sd_session_get_uid(const char *session, uid_t *uid) { if (r < 0) return r; - r = parse_env_file(NULL, p, "UID", &s, NULL); + r = parse_env_file(NULL, p, "UID", &s); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -546,7 +538,7 @@ static int session_get_string(const char *session, const char *field, char **val if (r < 0) return r; - r = parse_env_file(NULL, p, field, &s, NULL); + r = parse_env_file(NULL, p, field, &s); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -640,8 +632,7 @@ _public_ int sd_seat_get_active(const char *seat, char **session, uid_t *uid) { r = parse_env_file(NULL, p, "ACTIVE", &s, - "ACTIVE_UID", &t, - NULL); + "ACTIVE_UID", &t); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -678,8 +669,7 @@ _public_ int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **ui r = parse_env_file(NULL, p, "SESSIONS", &s, - "UIDS", &t, - NULL); + "UIDS", &t); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -746,8 +736,7 @@ static int seat_get_can(const char *seat, const char *variable) { return r; r = parse_env_file(NULL, p, - variable, &s, - NULL); + variable, &s); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -901,7 +890,7 @@ _public_ int sd_machine_get_class(const char *machine, char **class) { return -EINVAL; p = strjoina("/run/systemd/machines/", machine); - r = parse_env_file(NULL, p, "CLASS", &c, NULL); + r = parse_env_file(NULL, p, "CLASS", &c); if (r == -ENOENT) return -ENXIO; if (r < 0) @@ -925,7 +914,7 @@ _public_ int sd_machine_get_ifindices(const char *machine, int **ifindices) { assert_return(ifindices, -EINVAL); p = strjoina("/run/systemd/machines/", machine); - r = parse_env_file(NULL, p, "NETIF", &netif, NULL); + r = parse_env_file(NULL, p, "NETIF", &netif); if (r == -ENOENT) return -ENXIO; if (r < 0) diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c index 3d411dc5a4..fc66d41b63 100644 --- a/src/libsystemd/sd-network/sd-network.c +++ b/src/libsystemd/sd-network/sd-network.c @@ -24,7 +24,7 @@ _public_ int sd_network_get_operational_state(char **state) { assert_return(state, -EINVAL); - r = parse_env_file(NULL, "/run/systemd/netif/state", "OPER_STATE", &s, NULL); + r = parse_env_file(NULL, "/run/systemd/netif/state", "OPER_STATE", &s); if (r == -ENOENT) return -ENODATA; if (r < 0) @@ -44,7 +44,7 @@ static int network_get_strv(const char *key, char ***ret) { assert_return(ret, -EINVAL); - r = parse_env_file(NULL, "/run/systemd/netif/state", key, &s, NULL); + r = parse_env_file(NULL, "/run/systemd/netif/state", key, &s); if (r == -ENOENT) return -ENODATA; if (r < 0) @@ -92,7 +92,7 @@ static int network_link_get_string(int ifindex, const char *field, char **ret) { xsprintf(path, "/run/systemd/netif/links/%i", ifindex); - r = parse_env_file(NULL, path, field, &s, NULL); + r = parse_env_file(NULL, path, field, &s); if (r == -ENOENT) return -ENODATA; if (r < 0) @@ -115,7 +115,7 @@ static int network_link_get_strv(int ifindex, const char *key, char ***ret) { assert_return(ret, -EINVAL); xsprintf(path, "/run/systemd/netif/links/%i", ifindex); - r = parse_env_file(NULL, path, key, &s, NULL); + r = parse_env_file(NULL, path, key, &s); if (r == -ENOENT) return -ENODATA; if (r < 0) @@ -216,7 +216,7 @@ static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) { assert_return(ret, -EINVAL); xsprintf(path, "/run/systemd/netif/links/%i", ifindex); - r = parse_env_file(NULL, path, key, &s, NULL); + r = parse_env_file(NULL, path, key, &s); if (r == -ENOENT) return -ENODATA; if (r < 0) diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c index dadeef1f25..18668a99ab 100644 --- a/src/locale/keymap-util.c +++ b/src/locale/keymap-util.c @@ -128,8 +128,7 @@ int locale_read_data(Context *c, sd_bus_message *m) { "LC_ADDRESS", &c->locale[VARIABLE_LC_ADDRESS], "LC_TELEPHONE", &c->locale[VARIABLE_LC_TELEPHONE], "LC_MEASUREMENT", &c->locale[VARIABLE_LC_MEASUREMENT], - "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION], - NULL); + "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]); if (r < 0) return r; } else { @@ -188,8 +187,7 @@ int vconsole_read_data(Context *c, sd_bus_message *m) { r = parse_env_file(NULL, "/etc/vconsole.conf", "KEYMAP", &c->vc_keymap, - "KEYMAP_TOGGLE", &c->vc_keymap_toggle, - NULL); + "KEYMAP_TOGGLE", &c->vc_keymap_toggle); if (r < 0) return r; diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c index c45c9fd8c3..71eea72da5 100644 --- a/src/login/logind-inhibit.c +++ b/src/login/logind-inhibit.c @@ -200,8 +200,7 @@ int inhibitor_load(Inhibitor *i) { "WHO", &who, "WHY", &why, "MODE", &mode, - "FIFO", &i->fifo_path, - NULL); + "FIFO", &i->fifo_path); if (r < 0) return r; diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 0168fb0352..90af6bf070 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -431,8 +431,7 @@ int session_load(Session *s) { "CONTROLLER", &controller, "ACTIVE", &active, "DEVICES", &devices, - "IS_DISPLAY", &is_display, - NULL); + "IS_DISPLAY", &is_display); if (r < 0) return log_error_errno(r, "Failed to read %s: %m", s->state_file); diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 78cfe35a40..8d82944618 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -317,8 +317,7 @@ int user_load(User *u) { "STOPPING", &stopping, "REALTIME", &realtime, "MONOTONIC", &monotonic, - "LAST_SESSION_TIMESTAMP", &last_session_timestamp, - NULL); + "LAST_SESSION_TIMESTAMP", &last_session_timestamp); if (r == -ENOENT) return 0; if (r < 0) diff --git a/src/machine/machine.c b/src/machine/machine.c index 75fa94252d..e114541b3f 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -261,8 +261,7 @@ int machine_load(Machine *m) { "CLASS", &class, "REALTIME", &realtime, "MONOTONIC", &monotonic, - "NETIF", &netif, - NULL); + "NETIF", &netif); if (r < 0) { if (r == -ENOENT) return 0; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 8a62e07278..4af1a559b2 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3215,8 +3215,7 @@ static int link_load(Link *link) { "ADDRESSES", &addresses, "ROUTES", &routes, "DHCP4_ADDRESS", &dhcp4_address, - "IPV4LL_ADDRESS", &ipv4ll_address, - NULL); + "IPV4LL_ADDRESS", &ipv4ll_address); if (r < 0 && r != -ENOENT) return log_link_error_errno(link, r, "Failed to read %s: %m", link->state_file); diff --git a/src/network/networkd-lldp-tx.c b/src/network/networkd-lldp-tx.c index fa36e94a7c..de39568eca 100644 --- a/src/network/networkd-lldp-tx.c +++ b/src/network/networkd-lldp-tx.c @@ -244,7 +244,7 @@ static int link_send_lldp(Link *link) { return r; (void) gethostname_strict(&hostname); - (void) parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", &pretty_hostname, NULL); + (void) parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", &pretty_hostname); assert_cc(LLDP_TX_INTERVAL_USEC * LLDP_TX_HOLD + 1 <= (UINT16_MAX - 1) * USEC_PER_SEC); ttl = DIV_ROUND_UP(LLDP_TX_INTERVAL_USEC * LLDP_TX_HOLD + 1, USEC_PER_SEC); diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c index 1b77e4bcb0..1ce3f72ecb 100644 --- a/src/portable/portablectl.c +++ b/src/portable/portablectl.c @@ -281,8 +281,7 @@ static int inspect_image(int argc, char *argv[], void *userdata) { r = parse_env_file(f, "/etc/os-release", "PORTABLE_PRETTY_NAME", &pretty_portable, - "PRETTY_NAME", &pretty_os, - NULL); + "PRETTY_NAME", &pretty_os); if (r < 0) return log_error_errno(r, "Failed to parse /etc/os-release: %m"); diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c index 54bb805475..0ae3b40018 100644 --- a/src/resolve/resolved-link.c +++ b/src/resolve/resolved-link.c @@ -1263,8 +1263,7 @@ int link_load_user(Link *l) { "DNSSEC", &dnssec, "SERVERS", &servers, "DOMAINS", &domains, - "NTAS", &ntas, - NULL); + "NTAS", &ntas); if (r == -ENOENT) return 0; if (r < 0) diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index b43a7879ec..36a611c3c1 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -339,7 +339,7 @@ int show_cgroup_get_path_and_warn( const char *m; m = strjoina("/run/systemd/machines/", machine); - r = parse_env_file(NULL, m, "SCOPE", &unit, NULL); + r = parse_env_file(NULL, m, "SCOPE", &unit); if (r < 0) return log_error_errno(r, "Failed to load machine data: %m"); diff --git a/src/shared/condition.c b/src/shared/condition.c index 852bdda082..ecc32beadf 100644 --- a/src/shared/condition.c +++ b/src/shared/condition.c @@ -471,7 +471,7 @@ static int condition_test_needs_update(Condition *c) { uint64_t timestamp; int r; - r = parse_env_file(NULL, p, "TIMESTAMP_NSEC", ×tamp_str, NULL); + r = parse_env_file(NULL, p, "TIMESTAMP_NSEC", ×tamp_str); if (r < 0) { log_error_errno(r, "Failed to parse timestamp file '%s', using mtime: %m", p); return true; diff --git a/src/shared/udev-util.c b/src/shared/udev-util.c index f847269e82..e0c198eb6a 100644 --- a/src/shared/udev-util.c +++ b/src/shared/udev-util.c @@ -33,8 +33,7 @@ int udev_parse_config_full( "udev_log", &log_val, "children_max", &children_max, "exec_delay", &exec_delay, - "event_timeout", &event_timeout, - NULL); + "event_timeout", &event_timeout); if (r == -ENOENT) return 0; if (r < 0) diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 8719ec26bb..ac86d6d588 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -92,8 +92,7 @@ static void test_parse_env_file(void) { "seven", &seven, "eight", &eight, "export nine", &nine, - "ten", &ten, - NULL); + "ten", &ten); assert_se(r >= 0); diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c index 9917729427..41059bae04 100644 --- a/src/vconsole/vconsole-setup.c +++ b/src/vconsole/vconsole-setup.c @@ -423,8 +423,7 @@ int main(int argc, char **argv) { "KEYMAP_TOGGLE", &vc_keymap_toggle, "FONT", &vc_font, "FONT_MAP", &vc_font_map, - "FONT_UNIMAP", &vc_font_unimap, - NULL); + "FONT_UNIMAP", &vc_font_unimap); if (r < 0 && r != -ENOENT) log_warning_errno(r, "Failed to read /etc/vconsole.conf: %m");