]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: automatically add NULL sentinel to parse_env_file()
authorLennart Poettering <lennart@poettering.net>
Mon, 12 Nov 2018 13:18:03 +0000 (14:18 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 14 Nov 2018 16:01:55 +0000 (17:01 +0100)
Let's modernize things a bit.

25 files changed:
src/basic/fileio.c
src/basic/fileio.h
src/basic/util.c
src/core/locale-setup.c
src/hostname/hostnamed.c
src/journal-remote/journal-upload.c
src/journal/journald-stream.c
src/journal/sd-journal.c
src/libsystemd-network/sd-dhcp-lease.c
src/libsystemd/sd-login/sd-login.c
src/libsystemd/sd-network/sd-network.c
src/locale/keymap-util.c
src/login/logind-inhibit.c
src/login/logind-session.c
src/login/logind-user.c
src/machine/machine.c
src/network/networkd-link.c
src/network/networkd-lldp-tx.c
src/portable/portablectl.c
src/resolve/resolved-link.c
src/shared/cgroup-show.c
src/shared/condition.c
src/shared/udev-util.c
src/test/test-fileio.c
src/vconsole/vconsole-setup.c

index 45c0b4a840529ab288969ee09f9b93ed50d5b8d3..6c8305c2f82526cea7bbb5667173162f035e20ea 100644 (file)
@@ -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,
                 ...) {
index 66d9582ee7ef7d3bb01ced61fe23a41ef3543148..8be593512d21af6ea31597c39f24357db041f521 100644 (file)
@@ -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);
 
index b860753756034d39af977d2cfd37826b422a9ca5..cd75529cfe38981e2c7a3f03df6f465825c5344d 100644 (file)
@@ -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)
index e13f21f90f96f3eeddd37086a58a17afab53c028..64fddca48c4dc1ad7e3af804044a213ef558b020 100644 (file)
@@ -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");
         }
index b8facaf47dff395ff2be73ddf13065d46002f424..4cbf2bde8b4dc67c168ee08eaacec407759efee1 100644 (file)
@@ -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;
 
index 0fa915f4c3576c9da5f0658c192553d6e0dfd86b..b91d520cf0dafe837fcbd4868aff54043d6973eb 100644 (file)
@@ -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)
index ca102010bc5d82d5457327d9c56da8349701b04e..81aa7bd99fe9be66c0655c98af0ab81af72c5216 100644 (file)
@@ -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);
 
index dd556d01d69644b81d215f4479bd0ad821c73a04..1edabbde7292c14552148d2dca7e0e404c5e8fe7 100644 (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)
index 8fe468d4680280312b9c858ba382dc886aac81f5..a90c01d7db0618835a82ff33b54a766e7cae8643 100644 (file)
@@ -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;
 
index b5ef781b40e9501ee9f78a62f79e68f252eeeaeb..e048d2ce185305294f39c6e71debfc1c7f5ee9a9 100644 (file)
@@ -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)
index 3d411dc5a4dfb0a12bde0fbcd1cf3d7f3ddfd96c..fc66d41b638ac8f3da72d9366c5918701ce3d513 100644 (file)
@@ -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)
index dadeef1f259e1a38e28b4200690e40df8e4bf368..18668a99ab86e7928d54b9fe60854033d70f69d4 100644 (file)
@@ -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;
 
index c45c9fd8c3c4ef784ef285a933b7f0a0163874f4..71eea72da59fe8101e7532272fff80d7b473c032 100644 (file)
@@ -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;
 
index 0168fb0352fe769a6d0f66c97e712671327628fe..90af6bf0706993444cefe6c574c5f2793fd9881c 100644 (file)
@@ -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);
index 78cfe35a40d55c57948ce7843ee218c2517b92e0..8d8294461876241e5d4917b3efe2e60c6e68eb49 100644 (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)
index 75fa94252db1565b14bb814c57396576ab4b45c7..e114541b3f0c078daed9584f401d6483094bc390 100644 (file)
@@ -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;
index 8a62e07278dd4adf6d478a36d297b5ca5cd8edea..4af1a559b23465270d73b3f3a53ceb0051a748e7 100644 (file)
@@ -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);
 
index fa36e94a7c69152fd50b17b7ad287bd4a69e03b7..de39568eca82a5325ee6a075cc8c96f9b8ff266d 100644 (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);
index 1b77e4bcb08fa4936f5f7b1ddc82655ad7e73ee4..1ce3f72ecbf11509b2d92d4709869103aa2f77d8 100644 (file)
@@ -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");
 
index 54bb805475a517378e285b972f3df0ebd54b3ba9..0ae3b400181c862d4303ac7503c12f988679f9a9 100644 (file)
@@ -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)
index b43a7879ec50d1e36a5ee5dc6f0f4201fd3f836a..36a611c3c10345d57b11228cd6878518a9fbae22 100644 (file)
@@ -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");
 
index 852bdda08282f29c10130b9f19835118b8dfe6b0..ecc32beadfb6dd623160c463de9b79d1f04dca4b 100644 (file)
@@ -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", &timestamp_str, NULL);
+                r = parse_env_file(NULL, p, "TIMESTAMP_NSEC", &timestamp_str);
                 if (r < 0) {
                         log_error_errno(r, "Failed to parse timestamp file '%s', using mtime: %m", p);
                         return true;
index f847269e8220713d787ca950e30db147df417a6d..e0c198eb6ad64f98512f883979cbe82f7f0edbdb 100644 (file)
@@ -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)
index 8719ec26bb3dc95c3fcc683ab0be7b3ad53b91d4..ac86d6d588f0287d3a8fa247165b5261388da3ba 100644 (file)
@@ -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);
 
index 9917729427341b853f8ea0707a9246de651db81a..41059bae04446c2ca066429c95db72b8c60a2df3 100644 (file)
@@ -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");