netifd: Fix multiple -Wsign-compare warnings
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 12 Feb 2023 20:07:31 +0000 (21:07 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 19 Feb 2023 15:08:28 +0000 (16:08 +0100)
This fixes warnings like this:
warning: comparison of integer expressions of different signedness: 'int' and 'long unsigned int' [-Wsign-compare]

Mostly this was an int compared to a size_t returned by ARRAY_SIZE().
The easiest fix is to count on the size_t type.

The ifindex is sometimes an unsigned int and sometimes a signed int in
the kernel interfaces. I think it normally fits into an unsigned 16 bit
value, so this should be fine. Do the one comparison where the
compiler complains as a long.

Casting the result of sizeof() to int should be safe. These values are
never out of range of int.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
bonding.c
handler.c
interface-ip.c
main.c
system-linux.c
ubus.c
vlan.c
wireless.c

index 457fe515989910e84c670a79fa22de05b75f2433..f4005de059b4d3532a90bed841b47a906f24758d 100644 (file)
--- a/bonding.c
+++ b/bonding.c
@@ -396,7 +396,7 @@ bonding_apply_settings(struct bonding_device *bdev, struct blob_attr **tb)
 
        if ((cur = tb[BOND_ATTR_POLICY]) != NULL) {
                const char *policy = blobmsg_get_string(cur);
-               int i;
+               size_t i;
 
                for (i = 0; i < ARRAY_SIZE(bonding_policy_str); i++) {
                        if (strcmp(policy, bonding_policy_str[i]) != 0)
index 04bdbee89a04a4ab76111b36efcf512c32cced90..78fc9a01efca416f63d9d95af8ab8b6d5ddc9952 100644 (file)
--- a/handler.c
+++ b/handler.c
@@ -229,7 +229,8 @@ netifd_parse_extdev_handler(const char *path_to_file, create_extdev_handler_cb c
 void netifd_init_script_handlers(int dir_fd, script_dump_cb cb)
 {
        glob_t g;
-       int i, prev_fd;
+       int prev_fd;
+       size_t i;
 
        prev_fd = netifd_dir_push(dir_fd);
        if (glob("./*.sh", 0, NULL, &g)) {
@@ -252,7 +253,7 @@ netifd_init_extdev_handlers(int dir_fd, create_extdev_handler_cb cb)
 
        prev_fd = netifd_dir_push(dir_fd);
        glob("*.json", 0, NULL, &g);
-       for (int i = 0; i < g.gl_pathc; i++)
+       for (size_t i = 0; i < g.gl_pathc; i++)
                netifd_parse_extdev_handler(g.gl_pathv[i], cb);
        netifd_dir_pop(prev_fd);
 }
index ab4a5cfc2c18f9a9a1772558088ea51207ae2c5a..7359db2696bcbec91e0507c7808453197f236ae1 100644 (file)
@@ -99,7 +99,7 @@ static struct uloop_timeout valid_until_timeout;
 static void
 clear_if_addr(union if_addr *a, int mask)
 {
-       int m_bytes = (mask + 7) / 8;
+       size_t m_bytes = (mask + 7) / 8;
        uint8_t m_clear = (1 << (m_bytes * 8 - mask)) - 1;
        uint8_t *p = (uint8_t *) a;
 
diff --git a/main.c b/main.c
index 4c1c8554fbd6c305fa83dea572079171be548415..874dc8bd2215edf38016539801343e4f4e07f2de 100644 (file)
--- a/main.c
+++ b/main.c
@@ -303,8 +303,8 @@ int main(int argc, char **argv)
                        break;
                case 'l':
                        log_level = atoi(optarg);
-                       if (log_level >= ARRAY_SIZE(log_class))
-                               log_level = ARRAY_SIZE(log_class) - 1;
+                       if (log_level >= (int)ARRAY_SIZE(log_class))
+                               log_level = (int)ARRAY_SIZE(log_class) - 1;
                        break;
 #ifndef DUMMY_MODE
                case 'S':
index 45a9efbd7f0b0cb6983c80338fd92211b9a34676..d13a5619bf15916da4e8b7e5c6f4fbc764043ed4 100644 (file)
@@ -1154,7 +1154,7 @@ static bool check_ifaddr(struct nlmsghdr *hdr, int ifindex)
 {
        struct ifaddrmsg *ifa = NLMSG_DATA(hdr);
 
-       return ifa->ifa_index == ifindex;
+       return (long)ifa->ifa_index == ifindex;
 }
 
 static bool check_route(struct nlmsghdr *hdr, int ifindex)
@@ -1438,7 +1438,8 @@ int system_macvlan_add(struct device *macvlan, struct device *dev, struct macvla
 {
        struct nl_msg *msg;
        struct nlattr *linkinfo, *data;
-       int i, rv;
+       size_t i;
+       int rv;
        static const struct {
                const char *name;
                enum macvlan_mode val;
@@ -1700,7 +1701,7 @@ system_set_ethtool_settings(struct device *dev, struct device_settings *s)
                .ifr_data = (caddr_t)&ecmd,
        };
        static const struct {
-               int speed;
+               unsigned int speed;
                uint8_t bit_half;
                uint8_t bit_full;
        } speed_mask[] = {
@@ -1709,7 +1710,7 @@ system_set_ethtool_settings(struct device *dev, struct device_settings *s)
                { 1000, ETHTOOL_LINK_MODE_1000baseT_Half_BIT, ETHTOOL_LINK_MODE_1000baseT_Full_BIT },
        };
        uint32_t adv;
-       int i;
+       size_t i;
 
        strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
 
@@ -2355,7 +2356,7 @@ static const struct {
 
 static void system_add_link_modes(struct blob_buf *b, __u32 mask)
 {
-       int i;
+       size_t i;
        for (i = 0; i < ARRAY_SIZE(ethtool_link_modes); i++) {
                if (mask & ethtool_link_modes[i].mask)
                        blobmsg_add_string(b, NULL, ethtool_link_modes[i].name);
@@ -2373,7 +2374,7 @@ system_if_force_external(const char *ifname)
 static const char *
 system_netdevtype_name(unsigned short dev_type)
 {
-       unsigned int i;
+       size_t i;
 
        for (i = 0; i < ARRAY_SIZE(netdev_types); i++) {
                if (netdev_types[i].id == dev_type)
@@ -2457,7 +2458,8 @@ ethtool_feature_index(const char *ifname, const char *keyname)
 {
        struct ethtool_gstrings *feature_names;
        struct ifreq ifr = { 0 };
-       int32_t n_features, i;
+       int32_t n_features;
+       uint32_t i;
 
        n_features = ethtool_feature_count(ifname);
 
@@ -2592,7 +2594,7 @@ system_if_dump_stats(struct device *dev, struct blob_buf *b)
                "rx_fifo_errors", "tx_carrier_errors",
        };
        int stats_dir;
-       int i;
+       size_t i;
        uint64_t val = 0;
 
        stats_dir = open(dev_sysfs_path(dev->ifname, "statistics"), O_DIRECTORY);
@@ -2838,7 +2840,8 @@ int system_del_route(struct device *dev, struct device_route *route)
 int system_flush_routes(void)
 {
        const char *names[] = { "ipv4", "ipv6" };
-       int fd, i;
+       size_t i;
+       int fd;
 
        for (i = 0; i < ARRAY_SIZE(names); i++) {
                snprintf(dev_buf, sizeof(dev_buf), "%s/sys/net/%s/route/flush", proc_path, names[i]);
diff --git a/ubus.c b/ubus.c
index 7f4821ddbff2ff34e6d844f669b978012b6237a0..4d05786b6929ae202fe1ff18bc4b91a63a1b807c 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -1132,7 +1132,7 @@ netifd_handle_iface(struct ubus_context *ctx, struct ubus_object *obj,
 {
        struct interface *iface;
        struct blob_attr *tb;
-       int i;
+       size_t i;
 
        blobmsg_parse(&iface_policy, 1, &tb, blob_data(msg), blob_len(msg));
        if (!tb)
@@ -1158,7 +1158,7 @@ netifd_handle_iface(struct ubus_context *ctx, struct ubus_object *obj,
 static void netifd_add_iface_object(void)
 {
        struct ubus_method *methods;
-       int i;
+       size_t i;
 
        methods = calloc(1, sizeof(iface_object_methods));
        if (!methods)
diff --git a/vlan.c b/vlan.c
index 3d444a94c19e913880d0250aa6f34991beb59849..4d32b60b2eedf72b193dd47c6842bd6dc542ce53 100644 (file)
--- a/vlan.c
+++ b/vlan.c
@@ -143,7 +143,7 @@ static void vlan_dev_cb(struct device_user *dep, enum device_event ev)
                vlan_hotplug_check(vldev, dep->dev);
                vldev->dev.hidden = dep->dev->hidden;
                if (snprintf(name, sizeof(name), "%s.%d", dep->dev->ifname,
-                            vldev->id) >= sizeof(name) - 1 ||
+                            vldev->id) >= (int)sizeof(name) - 1 ||
                    device_set_ifname(&vldev->dev, name))
                        free_vlan_if(&vldev->dev);
                break;
@@ -203,7 +203,7 @@ static struct device *get_vlan_device(struct device *dev, char *id_str, bool cre
        if (!create)
                return NULL;
 
-       if (snprintf(name, sizeof(name), "%s.%d", dev->ifname, id) >= sizeof(name) - 1)
+       if (snprintf(name, sizeof(name), "%s.%d", dev->ifname, id) >= (int)sizeof(name) - 1)
                return NULL;
 
        D(DEVICE, "Create vlan device '%s'\n", name);
index 705d6dd028e39d740526957d40b4623fe0b6ab04..1f54bfb008cf24763574431feccbf1e7444cebc3 100644 (file)
@@ -1542,7 +1542,7 @@ void wireless_device_hotplug_event(const char *name, bool add)
        struct wireless_interface *vif;
        struct wireless_device *wdev;
        const char *s;
-       int len;
+       size_t len;
 
        s = strstr(name, ".sta");
        if (s) {