From: Hans Dedecker Date: Tue, 27 Jun 2017 09:33:08 +0000 (+0200) Subject: config: rework code to get rid of IFNAMSIZ usage X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=commitdiff_plain;h=3e4c8ad1a33abfb5f0e5886353ca4e3f2dbfedc1 config: rework code to get rid of IFNAMSIZ usage Get rid of IFNAMSIZE usage for interface name and ifname variables Signed-off-by: Hans Dedecker --- diff --git a/src/config.c b/src/config.c index 7940095..9ce20ef 100644 --- a/src/config.c +++ b/src/config.c @@ -4,12 +4,14 @@ #include #include #include +#include #include #include #include #include #include +#include #include "odhcpd.h" @@ -235,6 +237,7 @@ static void close_interface(struct interface *iface) setup_dhcpv4_interface(iface, false); clean_interface(iface); + free(iface->ifname); free(iface); } @@ -394,11 +397,13 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr struct interface *iface = get_interface(name); if (!iface) { - iface = calloc(1, sizeof(*iface)); + char *iface_name; + + iface = calloc_a(sizeof(*iface), &iface_name, strlen(name) + 1); if (!iface) return -1; - strncpy(iface->name, name, sizeof(iface->name) - 1); + iface->name = strcpy(iface_name, name); set_interface_defaults(iface); @@ -415,15 +420,20 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr } #ifdef WITH_UBUS - if (overwrite || !iface->ifname[0]) + if (overwrite || !iface->ifname) ifname = ubus_get_ifname(name); #endif - if (!iface->ifname[0] && !ifname) + if (!iface->ifname && !ifname) goto err; - if (ifname) - strncpy(iface->ifname, ifname, sizeof(iface->ifname) - 1); + if (ifname) { + free(iface->ifname); + iface->ifname = strdup(ifname); + + if (!iface->ifname) + goto err; + } if ((iface->ifindex = if_nametoindex(iface->ifname)) <= 0) goto err; diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 21d94f2..e1f0df6 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -138,8 +138,6 @@ int setup_dhcpv4_interface(struct interface *iface, bool enable) iface->dhcpv4_end.s_addr = end | htonl(12); } } - - } /* Parse static entries */ diff --git a/src/odhcpd.h b/src/odhcpd.h index 1803a41..93adca6 100644 --- a/src/odhcpd.h +++ b/src/odhcpd.h @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -118,8 +117,8 @@ struct interface { struct list_head head; int ifindex; - char ifname[IF_NAMESIZE]; - char name[IF_NAMESIZE]; + char *ifname; + const char *name; // Runtime data struct uloop_timeout timer_rs;