aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-12-02 18:18:50 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-12-02 18:18:50 +0000
commit360d9661b6a33b0358104623058f1c3629a469ea (patch)
tree268954b686b38c96428e3b74fc1ebb2ebdfdfb32
parent928b2c0fee65cae10f683ee0f1ea8d0a29a54924 (diff)
downloadbusybox-w32-360d9661b6a33b0358104623058f1c3629a469ea.tar.gz
busybox-w32-360d9661b6a33b0358104623058f1c3629a469ea.tar.bz2
busybox-w32-360d9661b6a33b0358104623058f1c3629a469ea.zip
libbb: add strncpy_IFNAMSIZ
function old new delta ... udhcp_read_interface 225 220 -5 brctl_main 1151 1146 -5 add_interface 109 104 -5 ipaddr_list_or_flush 2174 2167 -7 do_add_ioctl 88 80 -8 vconfig_main 249 240 -9 do_del_ioctl 78 68 -10 do_iplink 1186 1173 -13 do_if_fetch 766 753 -13 buffer_fill_and_print 196 179 -17 parse_args 1709 1684 -25 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/20 up/down: 11/-140) Total: -129 bytes
-rw-r--r--e2fsprogs/old_e2fsprogs/uuid/gen_uuid.c2
-rw-r--r--include/libbb.h1
-rw-r--r--libbb/xfuncs.c8
-rw-r--r--networking/arping.c2
-rw-r--r--networking/brctl.c4
-rw-r--r--networking/ether-wake.c4
-rw-r--r--networking/ifconfig.c2
-rw-r--r--networking/ifenslave.c5
-rw-r--r--networking/interface.c22
-rw-r--r--networking/libiproute/ipaddress.c2
-rw-r--r--networking/libiproute/iplink.c14
-rw-r--r--networking/libiproute/iptunnel.c21
-rw-r--r--networking/libiproute/ll_map.c2
-rw-r--r--networking/nameif.c2
-rw-r--r--networking/route.c2
-rw-r--r--networking/traceroute.c2
-rw-r--r--networking/udhcp/socket.c2
-rw-r--r--networking/vconfig.c2
-rw-r--r--networking/zcip.c2
19 files changed, 52 insertions, 49 deletions
diff --git a/e2fsprogs/old_e2fsprogs/uuid/gen_uuid.c b/e2fsprogs/old_e2fsprogs/uuid/gen_uuid.c
index 03a9f376a..4310c17db 100644
--- a/e2fsprogs/old_e2fsprogs/uuid/gen_uuid.c
+++ b/e2fsprogs/old_e2fsprogs/uuid/gen_uuid.c
@@ -165,7 +165,7 @@ static int get_node_id(unsigned char *node_id)
165 n = ifc.ifc_len; 165 n = ifc.ifc_len;
166 for (i = 0; i < n; i+= ifreq_size(*ifrp) ) { 166 for (i = 0; i < n; i+= ifreq_size(*ifrp) ) {
167 ifrp = (struct ifreq *)((char *) ifc.ifc_buf+i); 167 ifrp = (struct ifreq *)((char *) ifc.ifc_buf+i);
168 strncpy(ifr.ifr_name, ifrp->ifr_name, IFNAMSIZ); 168 strncpy_IFNAMSIZ(ifr.ifr_name, ifrp->ifr_name);
169#ifdef SIOCGIFHWADDR 169#ifdef SIOCGIFHWADDR
170 if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0) 170 if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0)
171 continue; 171 continue;
diff --git a/include/libbb.h b/include/libbb.h
index 77c4c6088..e4ccc7573 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -540,6 +540,7 @@ char *xstrdup(const char *s) FAST_FUNC;
540char *xstrndup(const char *s, int n) FAST_FUNC; 540char *xstrndup(const char *s, int n) FAST_FUNC;
541void overlapping_strcpy(char *dst, const char *src) FAST_FUNC; 541void overlapping_strcpy(char *dst, const char *src) FAST_FUNC;
542char *safe_strncpy(char *dst, const char *src, size_t size) FAST_FUNC; 542char *safe_strncpy(char *dst, const char *src, size_t size) FAST_FUNC;
543char *strncpy_IFNAMSIZ(char *dst, const char *src) FAST_FUNC;
543/* Guaranteed to NOT be a macro (smallest code). Saves nearly 2k on uclibc. 544/* Guaranteed to NOT be a macro (smallest code). Saves nearly 2k on uclibc.
544 * But potentially slow, don't use in one-billion-times loops */ 545 * But potentially slow, don't use in one-billion-times loops */
545int bb_putchar(int ch) FAST_FUNC; 546int bb_putchar(int ch) FAST_FUNC;
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index e2aee136c..f3c3c538c 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -40,6 +40,14 @@ int FAST_FUNC close_on_exec_on(int fd)
40 return fcntl(fd, F_SETFD, FD_CLOEXEC); 40 return fcntl(fd, F_SETFD, FD_CLOEXEC);
41} 41}
42 42
43char* FAST_FUNC strncpy_IFNAMSIZ(char *dst, const char *src)
44{
45#ifndef IFNAMSIZ
46 enum { IFNAMSIZ = 16 };
47#endif
48 return strncpy(dst, src, IFNAMSIZ);
49}
50
43/* Convert unsigned long long value into compact 4-char 51/* Convert unsigned long long value into compact 4-char
44 * representation. Examples: "1234", "1.2k", " 27M", "123T" 52 * representation. Examples: "1234", "1.2k", " 27M", "123T"
45 * String is not terminated (buf[4] is untouched) */ 53 * String is not terminated (buf[4] is untouched) */
diff --git a/networking/arping.c b/networking/arping.c
index aba32b869..e4429973b 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -286,7 +286,7 @@ int arping_main(int argc UNUSED_PARAM, char **argv)
286 struct ifreq ifr; 286 struct ifreq ifr;
287 287
288 memset(&ifr, 0, sizeof(ifr)); 288 memset(&ifr, 0, sizeof(ifr));
289 strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name) - 1); 289 strncpy_IFNAMSIZ(ifr.ifr_name, device);
290 /* We use ifr.ifr_name in error msg so that problem 290 /* We use ifr.ifr_name in error msg so that problem
291 * with truncated name will be visible */ 291 * with truncated name will be visible */
292 ioctl_or_perror_and_die(sock_fd, SIOCGIFINDEX, &ifr, err_str, "not found"); 292 ioctl_or_perror_and_die(sock_fd, SIOCGIFINDEX, &ifr, err_str, "not found");
diff --git a/networking/brctl.c b/networking/brctl.c
index 847517961..69e3c869c 100644
--- a/networking/brctl.c
+++ b/networking/brctl.c
@@ -137,7 +137,7 @@ int brctl_main(int argc UNUSED_PARAM, char **argv)
137 137
138 if (!if_indextoname(bridx[i], brname)) 138 if (!if_indextoname(bridx[i], brname))
139 bb_perror_msg_and_die("can't get bridge name for index %d", i); 139 bb_perror_msg_and_die("can't get bridge name for index %d", i);
140 strncpy(ifr.ifr_name, brname, IFNAMSIZ); 140 strncpy_IFNAMSIZ(ifr.ifr_name, brname);
141 141
142 arm_ioctl(args, BRCTL_GET_BRIDGE_INFO, 142 arm_ioctl(args, BRCTL_GET_BRIDGE_INFO,
143 (unsigned long) &bi, 0); 143 (unsigned long) &bi, 0);
@@ -191,7 +191,7 @@ int brctl_main(int argc UNUSED_PARAM, char **argv)
191 if (!*argv) /* all but 'addif/delif' need at least two arguments */ 191 if (!*argv) /* all but 'addif/delif' need at least two arguments */
192 bb_show_usage(); 192 bb_show_usage();
193 193
194 strncpy(ifr.ifr_name, br, IFNAMSIZ); 194 strncpy_IFNAMSIZ(ifr.ifr_name, br);
195 if (key == ARG_addif || key == ARG_delif) { /* addif or delif */ 195 if (key == ARG_addif || key == ARG_delif) { /* addif or delif */
196 brif = *argv; 196 brif = *argv;
197 ifr.ifr_ifindex = if_nametoindex(brif); 197 ifr.ifr_ifindex = if_nametoindex(brif);
diff --git a/networking/ether-wake.c b/networking/ether-wake.c
index a37b6eb79..882429d1a 100644
--- a/networking/ether-wake.c
+++ b/networking/ether-wake.c
@@ -219,7 +219,7 @@ int ether_wake_main(int argc UNUSED_PARAM, char **argv)
219 { 219 {
220 struct ifreq if_hwaddr; 220 struct ifreq if_hwaddr;
221 221
222 strncpy(if_hwaddr.ifr_name, ifname, sizeof(if_hwaddr.ifr_name)); 222 strncpy_IFNAMSIZ(if_hwaddr.ifr_name, ifname);
223 ioctl_or_perror_and_die(s, SIOCGIFHWADDR, &if_hwaddr, "SIOCGIFHWADDR on %s failed", ifname); 223 ioctl_or_perror_and_die(s, SIOCGIFHWADDR, &if_hwaddr, "SIOCGIFHWADDR on %s failed", ifname);
224 224
225 memcpy(outpack+6, if_hwaddr.ifr_hwaddr.sa_data, 6); 225 memcpy(outpack+6, if_hwaddr.ifr_hwaddr.sa_data, 6);
@@ -255,7 +255,7 @@ int ether_wake_main(int argc UNUSED_PARAM, char **argv)
255#if defined(PF_PACKET) 255#if defined(PF_PACKET)
256 { 256 {
257 struct ifreq ifr; 257 struct ifreq ifr;
258 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 258 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
259 xioctl(s, SIOCGIFINDEX, &ifr); 259 xioctl(s, SIOCGIFINDEX, &ifr);
260 memset(&whereto, 0, sizeof(whereto)); 260 memset(&whereto, 0, sizeof(whereto));
261 whereto.sll_family = AF_PACKET; 261 whereto.sll_family = AF_PACKET;
diff --git a/networking/ifconfig.c b/networking/ifconfig.c
index e999741d1..22b1682bc 100644
--- a/networking/ifconfig.c
+++ b/networking/ifconfig.c
@@ -313,7 +313,7 @@ int ifconfig_main(int argc, char **argv)
313 sockfd = xsocket(AF_INET, SOCK_DGRAM, 0); 313 sockfd = xsocket(AF_INET, SOCK_DGRAM, 0);
314 314
315 /* get interface name */ 315 /* get interface name */
316 strncpy(ifr.ifr_name, *argv, IFNAMSIZ); 316 strncpy_IFNAMSIZ(ifr.ifr_name, *argv);
317 317
318 /* Process the remaining arguments. */ 318 /* Process the remaining arguments. */
319 while (*++argv != (char *) NULL) { 319 while (*++argv != (char *) NULL) {
diff --git a/networking/ifenslave.c b/networking/ifenslave.c
index ae9745726..fa226425a 100644
--- a/networking/ifenslave.c
+++ b/networking/ifenslave.c
@@ -140,11 +140,6 @@ struct globals {
140 140
141/* NOINLINEs are placed where it results in smaller code (gcc 4.3.1) */ 141/* NOINLINEs are placed where it results in smaller code (gcc 4.3.1) */
142 142
143static void strncpy_IFNAMSIZ(char *dst, const char *src)
144{
145 strncpy(dst, src, IFNAMSIZ);
146}
147
148static int ioctl_on_skfd(unsigned request, struct ifreq *ifr) 143static int ioctl_on_skfd(unsigned request, struct ifreq *ifr)
149{ 144{
150 return ioctl(skfd, request, ifr); 145 return ioctl(skfd, request, ifr);
diff --git a/networking/interface.c b/networking/interface.c
index 00174d496..ef187be1a 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -395,7 +395,7 @@ static struct interface *add_interface(char *name)
395 } 395 }
396 396
397 new = xzalloc(sizeof(*new)); 397 new = xzalloc(sizeof(*new));
398 strncpy(new->name, name, IFNAMSIZ); 398 strncpy_IFNAMSIZ(new->name, name);
399 nextp = ife ? &ife->next : &int_list; 399 nextp = ife ? &ife->next : &int_list;
400 new->prev = ife; 400 new->prev = ife;
401 new->next = *nextp; 401 new->next = *nextp;
@@ -614,39 +614,39 @@ static int if_fetch(struct interface *ife)
614 614
615 skfd = xsocket(AF_INET, SOCK_DGRAM, 0); 615 skfd = xsocket(AF_INET, SOCK_DGRAM, 0);
616 616
617 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 617 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
618 if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) { 618 if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
619 close(skfd); 619 close(skfd);
620 return -1; 620 return -1;
621 } 621 }
622 ife->flags = ifr.ifr_flags; 622 ife->flags = ifr.ifr_flags;
623 623
624 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 624 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
625 memset(ife->hwaddr, 0, 32); 625 memset(ife->hwaddr, 0, 32);
626 if (ioctl(skfd, SIOCGIFHWADDR, &ifr) >= 0) 626 if (ioctl(skfd, SIOCGIFHWADDR, &ifr) >= 0)
627 memcpy(ife->hwaddr, ifr.ifr_hwaddr.sa_data, 8); 627 memcpy(ife->hwaddr, ifr.ifr_hwaddr.sa_data, 8);
628 628
629 ife->type = ifr.ifr_hwaddr.sa_family; 629 ife->type = ifr.ifr_hwaddr.sa_family;
630 630
631 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 631 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
632 ife->metric = 0; 632 ife->metric = 0;
633 if (ioctl(skfd, SIOCGIFMETRIC, &ifr) >= 0) 633 if (ioctl(skfd, SIOCGIFMETRIC, &ifr) >= 0)
634 ife->metric = ifr.ifr_metric; 634 ife->metric = ifr.ifr_metric;
635 635
636 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 636 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
637 ife->mtu = 0; 637 ife->mtu = 0;
638 if (ioctl(skfd, SIOCGIFMTU, &ifr) >= 0) 638 if (ioctl(skfd, SIOCGIFMTU, &ifr) >= 0)
639 ife->mtu = ifr.ifr_mtu; 639 ife->mtu = ifr.ifr_mtu;
640 640
641 memset(&ife->map, 0, sizeof(struct ifmap)); 641 memset(&ife->map, 0, sizeof(struct ifmap));
642#ifdef SIOCGIFMAP 642#ifdef SIOCGIFMAP
643 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 643 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
644 if (ioctl(skfd, SIOCGIFMAP, &ifr) == 0) 644 if (ioctl(skfd, SIOCGIFMAP, &ifr) == 0)
645 ife->map = ifr.ifr_map; 645 ife->map = ifr.ifr_map;
646#endif 646#endif
647 647
648#ifdef HAVE_TXQUEUELEN 648#ifdef HAVE_TXQUEUELEN
649 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 649 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
650 ife->tx_queue_len = -1; /* unknown value */ 650 ife->tx_queue_len = -1; /* unknown value */
651 if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) >= 0) 651 if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) >= 0)
652 ife->tx_queue_len = ifr.ifr_qlen; 652 ife->tx_queue_len = ifr.ifr_qlen;
@@ -654,23 +654,23 @@ static int if_fetch(struct interface *ife)
654 ife->tx_queue_len = -1; /* unknown value */ 654 ife->tx_queue_len = -1; /* unknown value */
655#endif 655#endif
656 656
657 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 657 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
658 ifr.ifr_addr.sa_family = AF_INET; 658 ifr.ifr_addr.sa_family = AF_INET;
659 memset(&ife->addr, 0, sizeof(struct sockaddr)); 659 memset(&ife->addr, 0, sizeof(struct sockaddr));
660 if (ioctl(skfd, SIOCGIFADDR, &ifr) == 0) { 660 if (ioctl(skfd, SIOCGIFADDR, &ifr) == 0) {
661 ife->has_ip = 1; 661 ife->has_ip = 1;
662 ife->addr = ifr.ifr_addr; 662 ife->addr = ifr.ifr_addr;
663 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 663 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
664 memset(&ife->dstaddr, 0, sizeof(struct sockaddr)); 664 memset(&ife->dstaddr, 0, sizeof(struct sockaddr));
665 if (ioctl(skfd, SIOCGIFDSTADDR, &ifr) >= 0) 665 if (ioctl(skfd, SIOCGIFDSTADDR, &ifr) >= 0)
666 ife->dstaddr = ifr.ifr_dstaddr; 666 ife->dstaddr = ifr.ifr_dstaddr;
667 667
668 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 668 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
669 memset(&ife->broadaddr, 0, sizeof(struct sockaddr)); 669 memset(&ife->broadaddr, 0, sizeof(struct sockaddr));
670 if (ioctl(skfd, SIOCGIFBRDADDR, &ifr) >= 0) 670 if (ioctl(skfd, SIOCGIFBRDADDR, &ifr) >= 0)
671 ife->broadaddr = ifr.ifr_broadaddr; 671 ife->broadaddr = ifr.ifr_broadaddr;
672 672
673 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); 673 strncpy_IFNAMSIZ(ifr.ifr_name, ifname);
674 memset(&ife->netmask, 0, sizeof(struct sockaddr)); 674 memset(&ife->netmask, 0, sizeof(struct sockaddr));
675 if (ioctl(skfd, SIOCGIFNETMASK, &ifr) >= 0) 675 if (ioctl(skfd, SIOCGIFNETMASK, &ifr) >= 0)
676 ife->netmask = ifr.ifr_netmask; 676 ife->netmask = ifr.ifr_netmask;
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c
index 288dccae7..fadab6f39 100644
--- a/networking/libiproute/ipaddress.c
+++ b/networking/libiproute/ipaddress.c
@@ -83,7 +83,7 @@ static void print_queuelen(char *name)
83 return; 83 return;
84 84
85 memset(&ifr, 0, sizeof(ifr)); 85 memset(&ifr, 0, sizeof(ifr));
86 strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); 86 strncpy_IFNAMSIZ(ifr.ifr_name, name);
87 if (ioctl_or_warn(s, SIOCGIFTXQLEN, &ifr) < 0) { 87 if (ioctl_or_warn(s, SIOCGIFTXQLEN, &ifr) < 0) {
88 close(s); 88 close(s);
89 return; 89 return;
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c
index 8de17bfc6..d3d0338b0 100644
--- a/networking/libiproute/iplink.c
+++ b/networking/libiproute/iplink.c
@@ -41,7 +41,7 @@ static void do_chflags(char *dev, uint32_t flags, uint32_t mask)
41 struct ifreq ifr; 41 struct ifreq ifr;
42 int fd; 42 int fd;
43 43
44 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 44 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
45 fd = get_ctl_fd(); 45 fd = get_ctl_fd();
46 xioctl(fd, SIOCGIFFLAGS, &ifr); 46 xioctl(fd, SIOCGIFFLAGS, &ifr);
47 if ((ifr.ifr_flags ^ flags) & mask) { 47 if ((ifr.ifr_flags ^ flags) & mask) {
@@ -58,8 +58,8 @@ static void do_changename(char *dev, char *newdev)
58 struct ifreq ifr; 58 struct ifreq ifr;
59 int fd; 59 int fd;
60 60
61 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 61 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
62 strncpy(ifr.ifr_newname, newdev, sizeof(ifr.ifr_newname)); 62 strncpy_IFNAMSIZ(ifr.ifr_newname, newdev);
63 fd = get_ctl_fd(); 63 fd = get_ctl_fd();
64 xioctl(fd, SIOCSIFNAME, &ifr); 64 xioctl(fd, SIOCSIFNAME, &ifr);
65 close(fd); 65 close(fd);
@@ -73,7 +73,7 @@ static void set_qlen(char *dev, int qlen)
73 73
74 s = get_ctl_fd(); 74 s = get_ctl_fd();
75 memset(&ifr, 0, sizeof(ifr)); 75 memset(&ifr, 0, sizeof(ifr));
76 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 76 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
77 ifr.ifr_qlen = qlen; 77 ifr.ifr_qlen = qlen;
78 xioctl(s, SIOCSIFTXQLEN, &ifr); 78 xioctl(s, SIOCSIFTXQLEN, &ifr);
79 close(s); 79 close(s);
@@ -87,7 +87,7 @@ static void set_mtu(char *dev, int mtu)
87 87
88 s = get_ctl_fd(); 88 s = get_ctl_fd();
89 memset(&ifr, 0, sizeof(ifr)); 89 memset(&ifr, 0, sizeof(ifr));
90 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 90 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
91 ifr.ifr_mtu = mtu; 91 ifr.ifr_mtu = mtu;
92 xioctl(s, SIOCSIFMTU, &ifr); 92 xioctl(s, SIOCSIFMTU, &ifr);
93 close(s); 93 close(s);
@@ -104,7 +104,7 @@ static int get_address(char *dev, int *htype)
104 s = xsocket(PF_PACKET, SOCK_DGRAM, 0); 104 s = xsocket(PF_PACKET, SOCK_DGRAM, 0);
105 105
106 memset(&ifr, 0, sizeof(ifr)); 106 memset(&ifr, 0, sizeof(ifr));
107 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 107 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
108 xioctl(s, SIOCGIFINDEX, &ifr); 108 xioctl(s, SIOCGIFINDEX, &ifr);
109 109
110 memset(&me, 0, sizeof(me)); 110 memset(&me, 0, sizeof(me));
@@ -128,7 +128,7 @@ static void parse_address(char *dev, int hatype, int halen, char *lla, struct if
128 int alen; 128 int alen;
129 129
130 memset(ifr, 0, sizeof(*ifr)); 130 memset(ifr, 0, sizeof(*ifr));
131 strncpy(ifr->ifr_name, dev, sizeof(ifr->ifr_name)); 131 strncpy_IFNAMSIZ(ifr->ifr_name, dev);
132 ifr->ifr_hwaddr.sa_family = hatype; 132 ifr->ifr_hwaddr.sa_family = hatype;
133 133
134 alen = hatype == 1/*ARPHRD_ETHER*/ ? 14/*ETH_HLEN*/ : 19/*INFINIBAND_HLEN*/; 134 alen = hatype == 1/*ARPHRD_ETHER*/ ? 14/*ETH_HLEN*/ : 19/*INFINIBAND_HLEN*/;
diff --git a/networking/libiproute/iptunnel.c b/networking/libiproute/iptunnel.c
index 65c27f936..ab4d65bd4 100644
--- a/networking/libiproute/iptunnel.c
+++ b/networking/libiproute/iptunnel.c
@@ -34,7 +34,7 @@ static int do_ioctl_get_ifindex(char *dev)
34 struct ifreq ifr; 34 struct ifreq ifr;
35 int fd; 35 int fd;
36 36
37 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 37 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
38 fd = xsocket(AF_INET, SOCK_DGRAM, 0); 38 fd = xsocket(AF_INET, SOCK_DGRAM, 0);
39 xioctl(fd, SIOCGIFINDEX, &ifr); 39 xioctl(fd, SIOCGIFINDEX, &ifr);
40 close(fd); 40 close(fd);
@@ -47,7 +47,7 @@ static int do_ioctl_get_iftype(char *dev)
47 int fd; 47 int fd;
48 int err; 48 int err;
49 49
50 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 50 strncpy_IFNAMSIZ(ifr.ifr_name, dev);
51 fd = xsocket(AF_INET, SOCK_DGRAM, 0); 51 fd = xsocket(AF_INET, SOCK_DGRAM, 0);
52 err = ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr); 52 err = ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr);
53 close(fd); 53 close(fd);
@@ -73,7 +73,7 @@ static int do_get_ioctl(const char *basedev, struct ip_tunnel_parm *p)
73 int fd; 73 int fd;
74 int err; 74 int err;
75 75
76 strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name)); 76 strncpy_IFNAMSIZ(ifr.ifr_name, basedev);
77 ifr.ifr_ifru.ifru_data = (void*)p; 77 ifr.ifr_ifru.ifru_data = (void*)p;
78 fd = xsocket(AF_INET, SOCK_DGRAM, 0); 78 fd = xsocket(AF_INET, SOCK_DGRAM, 0);
79 err = ioctl_or_warn(fd, SIOCGETTUNNEL, &ifr); 79 err = ioctl_or_warn(fd, SIOCGETTUNNEL, &ifr);
@@ -88,9 +88,9 @@ static int do_add_ioctl(int cmd, const char *basedev, struct ip_tunnel_parm *p)
88 int fd; 88 int fd;
89 89
90 if (cmd == SIOCCHGTUNNEL && p->name[0]) { 90 if (cmd == SIOCCHGTUNNEL && p->name[0]) {
91 strncpy(ifr.ifr_name, p->name, sizeof(ifr.ifr_name)); 91 strncpy_IFNAMSIZ(ifr.ifr_name, p->name);
92 } else { 92 } else {
93 strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name)); 93 strncpy_IFNAMSIZ(ifr.ifr_name, basedev);
94 } 94 }
95 ifr.ifr_ifru.ifru_data = (void*)p; 95 ifr.ifr_ifru.ifru_data = (void*)p;
96 fd = xsocket(AF_INET, SOCK_DGRAM, 0); 96 fd = xsocket(AF_INET, SOCK_DGRAM, 0);
@@ -114,9 +114,9 @@ static int do_del_ioctl(const char *basedev, struct ip_tunnel_parm *p)
114 int fd; 114 int fd;
115 115
116 if (p->name[0]) { 116 if (p->name[0]) {
117 strncpy(ifr.ifr_name, p->name, sizeof(ifr.ifr_name)); 117 strncpy_IFNAMSIZ(ifr.ifr_name, p->name);
118 } else { 118 } else {
119 strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name)); 119 strncpy_IFNAMSIZ(ifr.ifr_name, basedev);
120 } 120 }
121 ifr.ifr_ifru.ifru_data = (void*)p; 121 ifr.ifr_ifru.ifru_data = (void*)p;
122 fd = xsocket(AF_INET, SOCK_DGRAM, 0); 122 fd = xsocket(AF_INET, SOCK_DGRAM, 0);
@@ -148,7 +148,7 @@ static void parse_args(char **argv, int cmd, struct ip_tunnel_parm *p)
148 int key; 148 int key;
149 149
150 memset(p, 0, sizeof(*p)); 150 memset(p, 0, sizeof(*p));
151 memset(&medium, 0, sizeof(medium)); 151 medium[0] = '\0';
152 152
153 p->iph.version = 4; 153 p->iph.version = 4;
154 p->iph.ihl = 5; 154 p->iph.ihl = 5;
@@ -250,7 +250,7 @@ static void parse_args(char **argv, int cmd, struct ip_tunnel_parm *p)
250 p->iph.saddr = get_addr32(*argv); 250 p->iph.saddr = get_addr32(*argv);
251 } else if (key == ARG_dev) { 251 } else if (key == ARG_dev) {
252 NEXT_ARG(); 252 NEXT_ARG();
253 strncpy(medium, *argv, IFNAMSIZ-1); 253 strncpy_IFNAMSIZ(medium, *argv);
254 } else if (key == ARG_ttl) { 254 } else if (key == ARG_ttl) {
255 unsigned uval; 255 unsigned uval;
256 NEXT_ARG(); 256 NEXT_ARG();
@@ -279,7 +279,7 @@ static void parse_args(char **argv, int cmd, struct ip_tunnel_parm *p)
279 } 279 }
280 if (p->name[0]) 280 if (p->name[0])
281 duparg2("name", *argv); 281 duparg2("name", *argv);
282 strncpy(p->name, *argv, IFNAMSIZ); 282 strncpy_IFNAMSIZ(p->name, *argv);
283 if (cmd == SIOCCHGTUNNEL && count == 0) { 283 if (cmd == SIOCCHGTUNNEL && count == 0) {
284 struct ip_tunnel_parm old_p; 284 struct ip_tunnel_parm old_p;
285 memset(&old_p, 0, sizeof(old_p)); 285 memset(&old_p, 0, sizeof(old_p));
@@ -324,7 +324,6 @@ static void parse_args(char **argv, int cmd, struct ip_tunnel_parm *p)
324 } 324 }
325} 325}
326 326
327
328/* Return value becomes exitcode. It's okay to not return at all */ 327/* Return value becomes exitcode. It's okay to not return at all */
329static int do_add(int cmd, char **argv) 328static int do_add(int cmd, char **argv)
330{ 329{
diff --git a/networking/libiproute/ll_map.c b/networking/libiproute/ll_map.c
index eeae4e252..3412dc763 100644
--- a/networking/libiproute/ll_map.c
+++ b/networking/libiproute/ll_map.c
@@ -176,7 +176,7 @@ int xll_name_to_index(const char *const name)
176 struct ifreq ifr; 176 struct ifreq ifr;
177 int tmp; 177 int tmp;
178 178
179 strncpy(ifr.ifr_name, name, IFNAMSIZ); 179 strncpy_IFNAMSIZ(ifr.ifr_name, name);
180 ifr.ifr_ifindex = -1; 180 ifr.ifr_ifindex = -1;
181 tmp = ioctl(sock_fd, SIOCGIFINDEX, &ifr); 181 tmp = ioctl(sock_fd, SIOCGIFINDEX, &ifr);
182 close(sock_fd); 182 close(sock_fd);
diff --git a/networking/nameif.c b/networking/nameif.c
index 75829fac3..4d68c8d63 100644
--- a/networking/nameif.c
+++ b/networking/nameif.c
@@ -177,7 +177,7 @@ int nameif_main(int argc, char **argv)
177 177
178 /* Find the current interface name and copy it to ifr.ifr_name */ 178 /* Find the current interface name and copy it to ifr.ifr_name */
179 memset(&ifr, 0, sizeof(struct ifreq)); 179 memset(&ifr, 0, sizeof(struct ifreq));
180 strncpy(ifr.ifr_name, token[0], sizeof(ifr.ifr_name)); 180 strncpy_IFNAMSIZ(ifr.ifr_name, token[0]);
181 181
182#if ENABLE_FEATURE_NAMEIF_EXTENDED 182#if ENABLE_FEATURE_NAMEIF_EXTENDED
183 /* Check for driver etc. */ 183 /* Check for driver etc. */
diff --git a/networking/route.c b/networking/route.c
index 8778ecd38..5d2540802 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -423,7 +423,7 @@ static void INET6_setroute(int action, char **args)
423 if (devname) { 423 if (devname) {
424 struct ifreq ifr; 424 struct ifreq ifr;
425 memset(&ifr, 0, sizeof(ifr)); 425 memset(&ifr, 0, sizeof(ifr));
426 strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)); 426 strncpy_IFNAMSIZ(ifr.ifr_name, devname);
427 xioctl(skfd, SIOGIFINDEX, &ifr); 427 xioctl(skfd, SIOGIFINDEX, &ifr);
428 rt.rtmsg_ifindex = ifr.ifr_ifindex; 428 rt.rtmsg_ifindex = ifr.ifr_ifindex;
429 } 429 }
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 29cebfa61..5d1baacf5 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -447,7 +447,7 @@ ifaddrlist(struct IFADDRLIST **ipaddrp)
447 * SIOCGIFFLAGS stomps over it because the requests 447 * SIOCGIFFLAGS stomps over it because the requests
448 * are returned in a union.) 448 * are returned in a union.)
449 */ 449 */
450 strncpy(ifr.ifr_name, ifrp->ifr_name, sizeof(ifr.ifr_name)); 450 strncpy_IFNAMSIZ(ifr.ifr_name, ifrp->ifr_name);
451 if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifr) < 0) { 451 if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifr) < 0) {
452 if (errno == ENXIO) 452 if (errno == ENXIO)
453 continue; 453 continue;
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c
index ea0a2c3a8..857f0a4de 100644
--- a/networking/udhcp/socket.c
+++ b/networking/udhcp/socket.c
@@ -47,7 +47,7 @@ int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t
47 fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW); 47 fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW);
48 48
49 ifr.ifr_addr.sa_family = AF_INET; 49 ifr.ifr_addr.sa_family = AF_INET;
50 strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); 50 strncpy_IFNAMSIZ(ifr.ifr_name, interface);
51 if (addr) { 51 if (addr) {
52 if (ioctl_or_perror(fd, SIOCGIFADDR, &ifr, 52 if (ioctl_or_perror(fd, SIOCGIFADDR, &ifr,
53 "is interface %s up and configured?", interface) 53 "is interface %s up and configured?", interface)
diff --git a/networking/vconfig.c b/networking/vconfig.c
index 3f12e7609..69c729a14 100644
--- a/networking/vconfig.c
+++ b/networking/vconfig.c
@@ -133,7 +133,7 @@ int vconfig_main(int argc, char **argv)
133 if (ifr.cmd == SET_VLAN_NAME_TYPE_CMD) { /* set_name_type */ 133 if (ifr.cmd == SET_VLAN_NAME_TYPE_CMD) { /* set_name_type */
134 ifr.u.name_type = *xfind_str(name_types+1, argv[1]); 134 ifr.u.name_type = *xfind_str(name_types+1, argv[1]);
135 } else { 135 } else {
136 strncpy(ifr.device1, argv[1], IFNAMSIZ); 136 strncpy_IFNAMSIZ(ifr.device1, argv[1]);
137 p = argv[2]; 137 p = argv[2];
138 138
139 /* I suppose one could try to combine some of the function calls below, 139 /* I suppose one could try to combine some of the function calls below,
diff --git a/networking/zcip.c b/networking/zcip.c
index ff9c83dc7..3a349a5af 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -268,7 +268,7 @@ int zcip_main(int argc, char **argv)
268 268
269 // get the interface's ethernet address 269 // get the interface's ethernet address
270 //memset(&ifr, 0, sizeof(ifr)); 270 //memset(&ifr, 0, sizeof(ifr));
271 strncpy(ifr.ifr_name, argv_intf, sizeof(ifr.ifr_name)); 271 strncpy_IFNAMSIZ(ifr.ifr_name, argv_intf);
272 xioctl(sock_fd, SIOCGIFHWADDR, &ifr); 272 xioctl(sock_fd, SIOCGIFHWADDR, &ifr);
273 memcpy(&eth_addr, &ifr.ifr_hwaddr.sa_data, ETH_ALEN); 273 memcpy(&eth_addr, &ifr.ifr_hwaddr.sa_data, ETH_ALEN);
274 274