src: fix shadowed local variables
authorÁlvaro Fernández Rojas <[email protected]>
Fri, 28 Nov 2025 07:32:10 +0000 (08:32 +0100)
committerÁlvaro Fernández Rojas <[email protected]>
Fri, 28 Nov 2025 07:32:10 +0000 (08:32 +0100)
Fix shadowed local variables and enable warning to prevent more shadowed
variables in the future.

Signed-off-by: Álvaro Fernández Rojas <[email protected]>
CMakeLists.txt
src/config.c
src/dhcpv4.c
src/dhcpv6-ia.c
src/dhcpv6.c
src/dhcpv6.h
src/router.c

index 703d6b1f7583f41764c1fe385941d11d1c83b8ee..06b9af4bd94ef4db2eb8eaba3bb70c78ba78b1ab 100644 (file)
@@ -31,8 +31,10 @@ target_compile_options(${PROJECT_NAME} PRIVATE -Wformat)
 target_compile_options(${PROJECT_NAME} PRIVATE -Werror=format-security)
 target_compile_options(${PROJECT_NAME} PRIVATE -Werror=format-nonliteral)
 target_compile_options(${PROJECT_NAME} PRIVATE -Wimplicit-fallthrough=5)
+target_compile_options(${PROJECT_NAME} PRIVATE -Wno-shadow=compatible-local)
 target_compile_options(${PROJECT_NAME} PRIVATE -Wno-unused-parameter)
 target_compile_options(${PROJECT_NAME} PRIVATE -Wmissing-declarations)
+target_compile_options(${PROJECT_NAME} PRIVATE -Wshadow=local)
 
 
 # Libraries
index ec110b5c5db1fe4acf06278eec983099069b9d5d..f5773dca3db8cbdf2469f0b7a99becc29bbe5411 100644 (file)
@@ -1387,7 +1387,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                        uint8_t buf[DNS_MAX_NAME_LEN];
                        char *domain;
                        size_t domainlen;
-                       int len;
+                       int ds_len;
                        uint8_t *tmp;
 
                        if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING || !blobmsg_check_attr(cur, false))
@@ -1399,20 +1399,20 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                        if (domainlen > 0 && domain[domainlen - 1] == '.')
                                domain[domainlen - 1] = 0;
 
-                       len = dn_comp(domain, buf, sizeof(buf), NULL, NULL);
-                       if (len <= 0) {
+                       ds_len = dn_comp(domain, buf, sizeof(buf), NULL, NULL);
+                       if (ds_len <= 0) {
                                error("Invalid %s value configured for interface '%s'",
                                      iface_attrs[IFACE_ATTR_DNS_DOMAIN_SEARCH].name, iface->name);
                                continue;
                        }
 
-                       tmp = realloc(iface->dns_search, iface->dns_search_len + len);
+                       tmp = realloc(iface->dns_search, iface->dns_search_len + ds_len);
                        if (!tmp)
                                goto err;
 
                        iface->dns_search = tmp;
-                       memcpy(&iface->dns_search[iface->dns_search_len], buf, len);
-                       iface->dns_search_len += len;
+                       memcpy(&iface->dns_search[iface->dns_search_len], buf, ds_len);
+                       iface->dns_search_len += ds_len;
                }
        }
 
index 17c34ba6c295de482ebc1c29c6dbba6886cd0280..5afeb9183dbfa0807944747628ed97693a489f33 100644 (file)
@@ -1095,9 +1095,9 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len,
 
        /* Note: each option might get called more than once */
        for (size_t i = 0; i < sizeof(std_opts) + req_opts_len; i++) {
-               uint8_t opt = i < sizeof(std_opts) ? std_opts[i] : req_opts[i - sizeof(std_opts)];
+               uint8_t r_opt = i < sizeof(std_opts) ? std_opts[i] : req_opts[i - sizeof(std_opts)];
 
-               switch (opt) {
+               switch (r_opt) {
                case DHCPV4_OPT_NETMASK:
                        if (!lease)
                                break;
@@ -1216,20 +1216,20 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len,
                                iov[IOV_SRCH_DOMAIN_NAME].iov_base = iface->dns_search;
                                iov[IOV_SRCH_DOMAIN_NAME].iov_len = iface->dns_search_len;
                        } else if (!res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) {
-                               int len;
+                               int dds_len;
 
                                if (!iov[IOV_SRCH_DOMAIN_NAME].iov_base)
                                        iov[IOV_SRCH_DOMAIN_NAME].iov_base = alloca(DNS_MAX_NAME_LEN);
 
-                               len = dn_comp(_res.dnsrch[0],
+                               dds_len = dn_comp(_res.dnsrch[0],
                                              iov[IOV_SRCH_DOMAIN_NAME].iov_base,
                                              DNS_MAX_NAME_LEN, NULL, NULL);
-                               if (len < 0)
+                               if (dds_len < 0)
                                        break;
 
-                               reply_srch_domain.len = len;
+                               reply_srch_domain.len = dds_len;
                                iov[IOV_SRCH_DOMAIN].iov_len = sizeof(reply_srch_domain);
-                               iov[IOV_SRCH_DOMAIN_NAME].iov_len = len;
+                               iov[IOV_SRCH_DOMAIN_NAME].iov_len = dds_len;
                        }
                        break;
 
@@ -1247,8 +1247,8 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len,
                        if (!lease || reply_dnr.len > 0)
                                break;
 
-                       for (size_t i = 0; i < iface->dnr_cnt; i++) {
-                               struct dnr_options *dnr = &iface->dnr[i];
+                       for (size_t j = 0; j < iface->dnr_cnt; j++) {
+                               struct dnr_options *dnr = &iface->dnr[j];
 
                                if (dnr->addr4_cnt == 0 && dnr->addr6_cnt > 0)
                                        continue;
@@ -1269,8 +1269,8 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len,
                        dnrs = alloca(dnrs_len);
                        uint8_t *pos = (uint8_t *)dnrs;
 
-                       for (size_t i = 0; i < iface->dnr_cnt; i++) {
-                               struct dnr_options *dnr = &iface->dnr[i];
+                       for (size_t j = 0; j < iface->dnr_cnt; j++) {
+                               struct dnr_options *dnr = &iface->dnr[j];
                                struct dhcpv4_dnr *d4dnr = (struct dhcpv4_dnr *)pos;
                                uint16_t d4dnr_len = sizeof(uint16_t) + sizeof(uint8_t) + dnr->adn_len;
                                uint16_t d4dnr_priority_be = htons(dnr->priority);
@@ -1319,13 +1319,13 @@ void dhcpv4_handle_msg(void *src_addr, void *data, size_t len,
                                break;
 
                        uint8_t *buf = alloca(2 + uri_len);
-                       struct dhcpv4_option *opt = (struct dhcpv4_option *)buf;
+                       struct dhcpv4_option *cp_opt = (struct dhcpv4_option *)buf;
 
-                       opt->code = DHCPV4_OPT_CAPTIVE_PORTAL;
-                       opt->len  = uri_len;
-                       memcpy(opt->data, iface->captive_portal_uri, uri_len);
+                       cp_opt->code = DHCPV4_OPT_CAPTIVE_PORTAL;
+                       cp_opt->len  = uri_len;
+                       memcpy(cp_opt->data, iface->captive_portal_uri, uri_len);
 
-                       iov[IOV_CAPTIVE_PORTAL].iov_base = opt;
+                       iov[IOV_CAPTIVE_PORTAL].iov_base = cp_opt;
                        iov[IOV_CAPTIVE_PORTAL].iov_len  = 2 + uri_len;
                        break;
                }
index 87b124be6198d2bec722385c33ef6383b31cf88a..ca3f89d9811b6295a4ccb488b3efb18a93f9bddd 100644 (file)
@@ -1002,7 +1002,7 @@ ssize_t dhcpv6_ia_handle_IAs(uint8_t *buf, size_t buflen, struct interface *ifac
                if (is_pd) {
                        uint8_t *sdata;
                        uint16_t stype, slen;
-                       dhcpv6_for_each_option(&ia[1], odata + olen, stype, slen, sdata) {
+                       dhcpv6_for_each_sub_option(&ia[1], odata + olen, stype, slen, sdata) {
                                if (stype != DHCPV6_OPT_IA_PREFIX || slen < sizeof(struct dhcpv6_ia_prefix) - 4)
                                        continue;
 
@@ -1045,7 +1045,7 @@ ssize_t dhcpv6_ia_handle_IAs(uint8_t *buf, size_t buflen, struct interface *ifac
                } else if (is_na) {
                        uint8_t *sdata;
                        uint16_t stype, slen;
-                       dhcpv6_for_each_option(&ia[1], odata + olen, stype, slen, sdata) {
+                       dhcpv6_for_each_sub_option(&ia[1], odata + olen, stype, slen, sdata) {
                                if (stype != DHCPV6_OPT_IA_ADDR || slen < sizeof(struct dhcpv6_ia_addr) - 4)
                                        continue;
 
index 06b7f594784b11d292853891aebc09e4cfd96d1b..03537fd6d7929c8a98abe79a538377f266fa6ffb 100644 (file)
@@ -553,8 +553,8 @@ static void handle_client_request(void *addr, void *data, size_t len,
                        break;
 
                case DHCPV6_OPT_DNR:
-                       for (size_t i = 0; i < iface->dnr_cnt; i++) {
-                               struct dnr_options *dnr = &iface->dnr[i];
+                       for (size_t j = 0; j < iface->dnr_cnt; j++) {
+                               struct dnr_options *dnr = &iface->dnr[j];
 
                                if (dnr->addr6_cnt == 0 && dnr->addr4_cnt > 0)
                                        continue;
@@ -572,8 +572,8 @@ static void handle_client_request(void *addr, void *data, size_t len,
                        dnrs = alloca(dnrs_len);
                        uint8_t *pos = (uint8_t *)dnrs;
 
-                       for (size_t i = 0; i < iface->dnr_cnt; i++) {
-                               struct dnr_options *dnr = &iface->dnr[i];
+                       for (size_t j = 0; j < iface->dnr_cnt; j++) {
+                               struct dnr_options *dnr = &iface->dnr[j];
                                struct dhcpv6_dnr *d6dnr = (struct dhcpv6_dnr *)pos;
                                uint16_t d6dnr_type_be = htons(DHCPV6_OPT_DNR);
                                uint16_t d6dnr_len = 2 * sizeof(uint16_t) + dnr->adn_len;
@@ -620,11 +620,11 @@ static void handle_client_request(void *addr, void *data, size_t len,
        size_t dns_search_len = iface->dns_search_len;
 
        if (!dns_search && !res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) {
-               int len = dn_comp(_res.dnsrch[0], dns_search_buf,
+               int ds_len = dn_comp(_res.dnsrch[0], dns_search_buf,
                                sizeof(dns_search_buf), NULL, NULL);
-               if (len > 0) {
+               if (ds_len > 0) {
                        dns_search = dns_search_buf;
-                       dns_search_len = len;
+                       dns_search_len = ds_len;
                }
        }
 
@@ -874,10 +874,10 @@ static void relay_server_response(uint8_t *data, size_t len)
        if (payload_data[0] == DHCPV6_MSG_RELAY_REPL) {
                target.sin6_port = htons(DHCPV6_SERVER_PORT);
        } else { /* Go through the payload data */
-               struct dhcpv6_client_header *h = (void*)payload_data;
+               struct dhcpv6_client_header *dch = (void*)payload_data;
                end = payload_data + payload_len;
 
-               dhcpv6_for_each_option(&h[1], end, otype, olen, odata) {
+               dhcpv6_for_each_option(&dch[1], end, otype, olen, odata) {
                        if (otype == DHCPV6_OPT_DNS_SERVERS && olen >= sizeof(struct in6_addr)) {
                                dns_addrs6 = (struct in6_addr*)odata;
                                dns_addrs6_cnt = olen / sizeof(struct in6_addr);
index 0a7628c1981255ba6e370899606a87a75da14b9d..63301acc1be1a32e759f7b9865616889c7b72775 100644 (file)
@@ -167,10 +167,16 @@ struct dhcpv6_cer_id {
        struct in6_addr addr;
 };
 
-#define dhcpv6_for_each_option(start, end, otype, olen, odata)\
-       for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) &&\
-               ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) &&\
+#define dhcpv6_for_each_option(start, end, otype, olen, odata) \
+       for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) && \
+               ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) && \
                ((olen) = _o[2] << 8 | _o[3]) + (odata) <= (end); \
                _o += 4 + (_o[2] << 8 | _o[3]))
 
+#define dhcpv6_for_each_sub_option(start, end, otype, olen, odata) \
+       for (uint8_t *_so = (uint8_t*)(start); _so + 4 <= (end) && \
+               ((otype) = _so[0] << 8 | _so[1]) && ((odata) = (void*)&_so[4]) && \
+               ((olen) = _so[2] << 8 | _so[3]) + (odata) <= (end); \
+               _so += 4 + (_so[2] << 8 | _so[3]))
+
 #endif /* _DHCPV6_H_ */
index b882e016c0f0042ac72357591405b4dd36dac144..4fe8ccfb0fd0a687d3cbe2ec533a200a1138d905 100644 (file)
@@ -699,11 +699,11 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
                        continue; /* PIO filtered out of this RA */
                }
 
-               for (size_t i = 0; i < pfxs_cnt; ++i) {
-                       if (addr->prefix_len == pfxs[i].nd_opt_pi_prefix_len &&
-                           !odhcpd_bmemcmp(&pfxs[i].nd_opt_pi_prefix,
+               for (size_t j = 0; j < pfxs_cnt; ++j) {
+                       if (addr->prefix_len == pfxs[j].nd_opt_pi_prefix_len &&
+                           !odhcpd_bmemcmp(&pfxs[j].nd_opt_pi_prefix,
                                            &addr->addr.in6, addr->prefix_len))
-                               p = &pfxs[i];
+                               p = &pfxs[j];
                }
 
                if (!p) {