diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2017-06-27 11:33:08 +0200 |
---|---|---|
committer | Hans Dedecker <dedeckeh@gmail.com> | 2017-06-27 13:17:52 +0200 |
commit | 3e4c8ad1a33abfb5f0e5886353ca4e3f2dbfedc1 (patch) | |
tree | 2370371349e917e2a8b4007b84ed0e61c9491155 /src | |
parent | ab7813e71ca43397071b11250bd40007b116e224 (diff) |
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 <dedeckeh@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/config.c | 22 | ||||
-rw-r--r-- | src/dhcpv4.c | 2 | ||||
-rw-r--r-- | src/odhcpd.h | 5 |
3 files changed, 18 insertions, 11 deletions
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 <arpa/inet.h> #include <unistd.h> #include <libgen.h> +#include <net/if.h> #include <string.h> #include <sys/stat.h> #include <syslog.h> #include <uci.h> #include <uci_blob.h> +#include <libubox/utils.h> #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 <netinet/in.h> #include <netinet/icmp6.h> #include <netinet/ether.h> -#include <net/if.h> #include <stdbool.h> #include <syslog.h> @@ -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; |