fileio: automatically add NULL sentinel to parse_env_file()
Let's modernize things a bit.
This commit is contained in:
parent
608eea8ea0
commit
13df9c398d
|
@ -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,
|
||||
...) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
Loading…
Reference in a new issue