]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: make parse_ifindex simply return the index
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 18 Dec 2019 12:54:13 +0000 (13:54 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 11 Jan 2020 11:06:08 +0000 (12:06 +0100)
We don't need a seperate output parameter that is of type int.  glibc() says
that the type is "unsigned", but the kernel thinks it's "int".  And the
"alternative names" interface also uses ints. So let's standarize on ints,
since it's clearly not realisitic to have interface numbers in the upper half
of unsigned int range.

15 files changed:
src/basic/in-addr-util.c
src/basic/parse-util.c
src/basic/parse-util.h
src/libsystemd/sd-device/sd-device.c
src/libsystemd/sd-login/sd-login.c
src/libsystemd/sd-network/sd-network.c
src/machine/machine.c
src/network/networkctl.c
src/network/networkd-link-bus.c
src/network/networkd-route.c
src/nspawn/nspawn-network.c
src/resolve/resolvectl.c
src/resolve/resolved-link-bus.c
src/resolve/resolved-manager.c
src/timedate/timedatectl.c

index 06b92db579fda40e2a728eab9a963d32f41e37b5..b6ca27e3e82d45ccb59c97bb305f75232ddc7c90 100644 (file)
@@ -439,48 +439,38 @@ int in_addr_from_string_auto(const char *s, int *ret_family, union in_addr_union
         return -EINVAL;
 }
 
-int in_addr_ifindex_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex) {
+int in_addr_ifindex_from_string_auto(const char *s, int *family, union in_addr_union *ret_addr, int *ret_ifindex) {
         _cleanup_free_ char *buf = NULL;
         const char *suffix;
-        int r, ifi = 0;
+        int r, ifindex = 0;
 
         assert(s);
         assert(family);
-        assert(ret);
+        assert(ret_addr);
 
         /* Similar to in_addr_from_string_auto() but also parses an optionally appended IPv6 zone suffix ("scope id")
          * if one is found. */
 
         suffix = strchr(s, '%');
         if (suffix) {
-
-                if (ifindex) {
+                if (ret_ifindex) {
                         /* If we shall return the interface index, try to parse it */
-                        r = parse_ifindex(suffix + 1, &ifi);
-                        if (r < 0) {
-                                unsigned u;
-
-                                u = if_nametoindex(suffix + 1);
-                                if (u <= 0)
-                                        return -errno;
-
-                                ifi = (int) u;
-                        }
+                        ifindex = parse_ifindex_or_ifname(suffix + 1);
+                        if (ifindex < 0)
+                                return ifindex;
                 }
 
-                buf = strndup(s, suffix - s);
+                s = buf = strndup(s, suffix - s);
                 if (!buf)
                         return -ENOMEM;
-
-                s = buf;
         }
 
-        r = in_addr_from_string_auto(s, family, ret);
+        r = in_addr_from_string_auto(s, family, ret_addr);
         if (r < 0)
                 return r;
 
-        if (ifindex)
-                *ifindex = ifi;
+        if (ret_ifindex)
+                *ret_ifindex = ifindex;
 
         return r;
 }
index b81db04989fb11851ef500e8fb8507e723df6385..d3140cc1a401a8ba172e35f2b94f94d989acbbf9 100644 (file)
@@ -79,11 +79,10 @@ int parse_mode(const char *s, mode_t *ret) {
         return 0;
 }
 
-int parse_ifindex(const char *s, int *ret) {
+int parse_ifindex(const char *s) {
         int ifi, r;
 
         assert(s);
-        assert(ret);
 
         r = safe_atoi(s, &ifi);
         if (r < 0)
@@ -91,26 +90,24 @@ int parse_ifindex(const char *s, int *ret) {
         if (ifi <= 0)
                 return -EINVAL;
 
-        *ret = ifi;
-        return 0;
+        return ifi;
 }
 
-int parse_ifindex_or_ifname(const char *s, int *ret) {
+int parse_ifindex_or_ifname(const char *s) {
         int r;
 
         assert(s);
-        assert(ret);
 
-        r = parse_ifindex(s, ret);
-        if (r >= 0)
+        r = parse_ifindex(s);
+        if (r > 0)
                 return r;
+        assert(r < 0);
 
         r = (int) if_nametoindex(s);
         if (r <= 0)
                 return -errno;
 
-        *ret = r;
-        return 0;
+        return r;
 }
 
 int parse_mtu(int family, const char *s, uint32_t *ret) {
index 3a70b792766fb10740036be3586795148eb3de49..b20f5b52ccea2930013abd451f01ec8940255d77 100644 (file)
@@ -13,8 +13,8 @@ int parse_boolean(const char *v) _pure_;
 int parse_dev(const char *s, dev_t *ret);
 int parse_pid(const char *s, pid_t* ret_pid);
 int parse_mode(const char *s, mode_t *ret);
-int parse_ifindex(const char *s, int *ret);
-int parse_ifindex_or_ifname(const char *s, int *ret);
+int parse_ifindex(const char *s);
+int parse_ifindex_or_ifname(const char *s);
 int parse_mtu(int family, const char *s, uint32_t *ret);
 
 int parse_size(const char *t, uint64_t base, uint64_t *size);
index f35612fe12bc7cc2f9b3bd2f8066d59c49a4f0d4..1f2451f8e1b4e4d851571a19d858aedc9d1e9196 100644 (file)
@@ -340,17 +340,17 @@ int device_set_devtype(sd_device *device, const char *_devtype) {
         return 0;
 }
 
-int device_set_ifindex(sd_device *device, const char *_ifindex) {
-        int ifindex, r;
+int device_set_ifindex(sd_device *device, const char *name) {
+        int r, ifindex;
 
         assert(device);
-        assert(_ifindex);
+        assert(name);
 
-        r = parse_ifindex(_ifindex, &ifindex);
-        if (r < 0)
-                return r;
+        ifindex = parse_ifindex(name);
+        if (ifindex < 0)
+                return ifindex;
 
-        r = device_add_property_internal(device, "IFINDEX", _ifindex);
+        r = device_add_property_internal(device, "IFINDEX", name);
         if (r < 0)
                 return r;
 
@@ -619,7 +619,7 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
                 struct ifreq ifr = {};
                 int ifindex;
 
-                r = parse_ifindex(&id[1], &ifr.ifr_ifindex);
+                r = ifr.ifr_ifindex = parse_ifindex(&id[1]);
                 if (r < 0)
                         return r;
 
index fbfd89b69b1d557be99d89b69884ccf0f3a26e9d..3e96c98cd95a2b9a5afa807ebb248c6f9a140cde 100644 (file)
@@ -928,7 +928,8 @@ _public_ int sd_machine_get_ifindices(const char *machine, int **ifindices) {
 
                 *(char*) (mempcpy(buf, word, l)) = 0;
 
-                if (parse_ifindex(buf, &ifi) < 0)
+                ifi = parse_ifindex(buf);
+                if (ifi < 0)
                         continue;
 
                 if (!GREEDY_REALLOC(ni, allocated, nr+1)) {
index dc5ccb793bc9d7b36dc0661553b1263403c42910..b9b618e58501c7b03a4836f20b2f68f1988537d2 100644 (file)
@@ -276,7 +276,6 @@ static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
         _cleanup_free_ int *ifis = NULL;
         _cleanup_free_ char *s = NULL;
         size_t allocated = 0, c = 0;
-        const char *x;
         int r;
 
         assert_return(ifindex > 0, -EINVAL);
@@ -289,7 +288,7 @@ static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
         if (r < 0)
                 return r;
 
-        for (x = s;;) {
+        for (const char *x = s;;) {
                 _cleanup_free_ char *word = NULL;
 
                 r = extract_first_word(&x, &word, NULL, 0);
@@ -298,14 +297,12 @@ static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
                 if (r == 0)
                         break;
 
-                r = parse_ifindex(word, &ifindex);
-                if (r < 0)
-                        return r;
-
                 if (!GREEDY_REALLOC(ifis, allocated, c + 2))
                         return -ENOMEM;
 
-                ifis[c++] = ifindex;
+                r = ifis[c++] = parse_ifindex(word);
+                if (r < 0)
+                        return r;
         }
 
         if (ifis)
index efe327f381ddd1f3fa8b2831fe545ca9cfb95ba8..8154c42ed774b8ea46fc1dfcb57711f61f1b9e9c 100644 (file)
@@ -294,12 +294,11 @@ int machine_load(Machine *m) {
         if (netif) {
                 size_t allocated = 0, nr = 0;
                 const char *p;
-                int *ni = NULL;
+                _cleanup_free_ int *ni = NULL;
 
                 p = netif;
                 for (;;) {
                         _cleanup_free_ char *word = NULL;
-                        int ifi;
 
                         r = extract_first_word(&p, &word, NULL, 0);
                         if (r == 0)
@@ -311,19 +310,18 @@ int machine_load(Machine *m) {
                                 break;
                         }
 
-                        if (parse_ifindex(word, &ifi) < 0)
+                        r = parse_ifindex(word);
+                        if (r < 0)
                                 continue;
 
-                        if (!GREEDY_REALLOC(ni, allocated, nr+1)) {
-                                free(ni);
+                        if (!GREEDY_REALLOC(ni, allocated, nr + 1))
                                 return log_oom();
-                        }
 
-                        ni[nr++] = ifi;
+                        ni[nr++] = r;
                 }
 
                 free(m->netif);
-                m->netif = ni;
+                m->netif = TAKE_PTR(ni);
                 m->n_netif = nr;
         }
 
index e6dc70a0e2bab64f671e1eaf7b9fc250a5247eaa..0cc018e088c5eace1500dc073ab6aff530e46530 100644 (file)
@@ -1880,8 +1880,8 @@ static int link_delete(int argc, char *argv[], void *userdata) {
                 return log_oom();
 
         for (i = 1; i < argc; i++) {
-                r = parse_ifindex_or_ifname(argv[i], &index);
-                if (r < 0) {
+                index = parse_ifindex_or_ifname(argv[i]);
+                if (index < 0) {
                         r = rtnl_resolve_link_alternative_name(&rtnl, argv[i], &index);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to resolve interface %s", argv[i]);
@@ -1936,8 +1936,8 @@ static int link_renew(int argc, char *argv[], void *userdata) {
                 return log_error_errno(r, "Failed to connect system bus: %m");
 
         for (i = 1; i < argc; i++) {
-                r = parse_ifindex_or_ifname(argv[i], &index);
-                if (r < 0) {
+                index = parse_ifindex_or_ifname(argv[i]);
+                if (index < 0) {
                         r = rtnl_resolve_link_alternative_name(&rtnl, argv[i], &index);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to resolve interface %s", argv[i]);
@@ -1991,8 +1991,8 @@ static int verb_reconfigure(int argc, char *argv[], void *userdata) {
                 return log_oom();
 
         for (i = 1; i < argc; i++) {
-                r = parse_ifindex_or_ifname(argv[i], &index);
-                if (r < 0) {
+                index = parse_ifindex_or_ifname(argv[i]);
+                if (index < 0) {
                         r = rtnl_resolve_link_alternative_name(&rtnl, argv[i], &index);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to resolve interface %s", argv[i]);
index 356ceaf0630856639d2586441f83bf16ca4f07a9..8f3b2e92f8fff739fb6ae14b2054bea2ed754b74 100644 (file)
@@ -715,8 +715,8 @@ int link_object_find(sd_bus *bus, const char *path, const char *interface, void
         if (r <= 0)
                 return 0;
 
-        r = parse_ifindex(identifier, &ifindex);
-        if (r < 0)
+        ifindex = parse_ifindex(identifier);
+        if (ifindex < 0)
                 return 0;
 
         r = link_get(m, ifindex, &link);
index f94bee6d8b0d1b4859a16494291f0f16d2f02a46..2223a356da89bda0f62ca22e9f25722745e05bcf 100644 (file)
@@ -1646,12 +1646,13 @@ int config_parse_multipath_route(
         m->gateway.family = family;
 
         if (dev) {
-                r = parse_ifindex_or_ifname(dev, &m->ifindex);
+                r = parse_ifindex_or_ifname(dev);
                 if (r < 0) {
                         log_syntax(unit, LOG_ERR, filename, line, r,
                                    "Invalid interface name or index, ignoring assignment: %s", dev);
                         return 0;
                 }
+                m->ifindex = r;
         }
 
         if (!isempty(p)) {
index 9c9cf4812e8f2cb8a0fea709dcefd443c89c5f7e..b2592b023dd8aa32c714eb26005d4eb46d7250ee 100644 (file)
@@ -337,9 +337,9 @@ static int join_bridge(sd_netlink *rtnl, const char *veth_name, const char *brid
         assert(veth_name);
         assert(bridge_name);
 
-        r = parse_ifindex_or_ifname(bridge_name, &bridge_ifi);
-        if (r < 0)
-                return r;
+        bridge_ifi = parse_ifindex_or_ifname(bridge_name);
+        if (bridge_ifi < 0)
+                return bridge_ifi;
 
         r = sd_rtnl_message_new_link(rtnl, &m, RTM_SETLINK, 0);
         if (r < 0)
@@ -473,11 +473,11 @@ int remove_bridge(const char *bridge_name) {
 }
 
 static int parse_interface(const char *name) {
-        int ifi, r;
+        int ifi;
 
-        r = parse_ifindex_or_ifname(name, &ifi);
-        if (r < 0)
-                return log_error_errno(r, "Failed to resolve interface %s: %m", name);
+        ifi = parse_ifindex_or_ifname(name);
+        if (ifi < 0)
+                return log_error_errno(ifi, "Failed to resolve interface %s: %m", name);
 
         return ifi;
 }
index 0a96a18b3836ae1ad53c89f387f43845baaaef81..87ecd519d58d5e80310a574b4e9f2093d2f64f80 100644 (file)
@@ -80,7 +80,7 @@ typedef enum StatusMode {
 int ifname_mangle(const char *s) {
         _cleanup_free_ char *iface = NULL;
         const char *dot;
-        int ifi, r;
+        int ifi;
 
         assert(s);
 
@@ -94,14 +94,14 @@ int ifname_mangle(const char *s) {
         if (!iface)
                 return log_oom();
 
-        r = parse_ifindex_or_ifname(iface, &ifi);
-        if (r < 0) {
-                if (r == -ENODEV && arg_ifindex_permissive) {
+        ifi = parse_ifindex_or_ifname(iface);
+        if (ifi < 0) {
+                if (ifi == -ENODEV && arg_ifindex_permissive) {
                         log_debug("Interface '%s' not found, but -f specified, ignoring.", iface);
                         return 0; /* done */
                 }
 
-                return log_error_errno(r, "Unknown interface '%s': %m", iface);
+                return log_error_errno(ifi, "Unknown interface '%s': %m", iface);
         }
 
         if (arg_ifindex > 0 && arg_ifindex != ifi)
@@ -1819,18 +1819,18 @@ static int status_all(sd_bus *bus, StatusMode mode) {
 
 static int verb_status(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        int q, r = 0;
+        int r = 0;
 
         if (argc > 1) {
                 char **ifname;
                 bool empty_line = false;
 
                 STRV_FOREACH(ifname, argv + 1) {
-                        int ifindex;
+                        int ifindex, q;
 
-                        q = parse_ifindex_or_ifname(*ifname, &ifindex);
-                        if (q < 0) {
-                                log_error_errno(q, "Unknown interface '%s', ignoring: %m", *ifname);
+                        ifindex = parse_ifindex_or_ifname(*ifname);
+                        if (ifindex < 0) {
+                                log_warning_errno(ifindex, "Unknown interface '%s', ignoring: %m", *ifname);
                                 continue;
                         }
 
index dae8435b45bec93d5e784ba7142e06c51204cfc8..a8480f190a6f96b04b15e55f4c85acd4573477a3 100644 (file)
@@ -712,9 +712,8 @@ const sd_bus_vtable link_vtable[] = {
 int link_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
         _cleanup_free_ char *e = NULL;
         Manager *m = userdata;
-        int ifindex;
         Link *link;
-        int r;
+        int ifindex, r;
 
         assert(bus);
         assert(path);
@@ -726,8 +725,8 @@ int link_object_find(sd_bus *bus, const char *path, const char *interface, void
         if (r <= 0)
                 return 0;
 
-        r = parse_ifindex(e, &ifindex);
-        if (r < 0)
+        ifindex = parse_ifindex(e);
+        if (ifindex < 0)
                 return 0;
 
         link = hashmap_get(m->links, INT_TO_PTR(ifindex));
index 95f698ab06d6498c7365cbf35043495207a8bf45..af91a8ec1a5e7d0379b432652c4482c43aa3cf41 100644 (file)
@@ -1466,7 +1466,6 @@ void manager_reset_server_features(Manager *m) {
 void manager_cleanup_saved_user(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
         struct dirent *de;
-        int r;
 
         assert(m);
 
@@ -1494,8 +1493,8 @@ void manager_cleanup_saved_user(Manager *m) {
                 if (dot_or_dot_dot(de->d_name))
                         continue;
 
-                r = parse_ifindex(de->d_name, &ifindex);
-                if (r < 0) /* Probably some temporary file from a previous run. Delete it */
+                ifindex = parse_ifindex(de->d_name);
+                if (ifindex < 0) /* Probably some temporary file from a previous run. Delete it */
                         goto rm;
 
                 l = hashmap_get(m->links, INT_TO_PTR(ifindex));
index 17297ab22889202a756f8e7660c6c899722f0136..d51e29de1e6aa2742d4be678d6d4cb31b3a99bec 100644 (file)
@@ -839,9 +839,12 @@ static int parse_ifindex_bus(sd_bus *bus, const char *str, int *ret) {
         assert(str);
         assert(ret);
 
-        r = parse_ifindex(str, ret);
-        if (r >= 0)
+        r = parse_ifindex(str);
+        if (r >= 0) {
+                assert(r != 0);
+                *ret = r;
                 return 0;
+        }
 
         r = sd_bus_call_method(
                         bus,