[git commit] gcc-9.x warning fixes

Denys Vlasenko vda.linux at googlemail.com
Thu Oct 1 01:07:22 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=4a0eb0370c4df8ee01973b50bb460560532b79f1
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/tar.c               | 3 ++-
 include/libbb.h              | 2 +-
 libbb/inet_cksum.c           | 4 +++-
 networking/ping.c            | 4 ++--
 networking/traceroute.c      | 2 +-
 networking/udhcp/d6_dhcpc.c  | 2 +-
 networking/udhcp/d6_packet.c | 2 +-
 networking/udhcp/dhcpc.c     | 4 ++--
 networking/udhcp/packet.c    | 4 ++--
 9 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/archival/tar.c b/archival/tar.c
index 4ab38db29..4f2564813 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -297,7 +297,8 @@ static void writeLongname(int fd, int type, const char *name, int dir)
 	header.typeflag = type;
 	strcpy(header.name, "././@LongLink");
 	/* This sets mode/uid/gid/mtime to "00...00<NUL>" strings */
-	memset(header.mode, '0', sizeof(struct prefilled));
+	memset((char*)&header + offsetof(struct tar_header_t, mode), /* make gcc-9.x happy */
+			'0', sizeof(struct prefilled));
 	header.mode [sizeof(header.mode ) - 1] = '\0';
 	header.uid  [sizeof(header.uid  ) - 1] = '\0';
 	header.gid  [sizeof(header.gid  ) - 1] = '\0';
diff --git a/include/libbb.h b/include/libbb.h
index df7e45404..3e23b5bbd 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -818,7 +818,7 @@ ssize_t recv_from_to(int fd, void *buf, size_t len, int flags,
 		struct sockaddr *to,
 		socklen_t sa_size) FAST_FUNC;
 
-uint16_t inet_cksum(uint16_t *addr, int len) FAST_FUNC;
+uint16_t inet_cksum(const void *addr, int len) FAST_FUNC;
 int parse_pasv_epsv(char *buf) FAST_FUNC;
 
 /* 0 if argv[0] is NULL: */
diff --git a/libbb/inet_cksum.c b/libbb/inet_cksum.c
index 3d5dc3adf..fee8648f3 100644
--- a/libbb/inet_cksum.c
+++ b/libbb/inet_cksum.c
@@ -6,8 +6,10 @@
 
 #include "libbb.h"
 
-uint16_t FAST_FUNC inet_cksum(uint16_t *addr, int nleft)
+uint16_t FAST_FUNC inet_cksum(const void *ptr, int nleft)
 {
+	const uint16_t *addr = ptr;
+
 	/*
 	 * Our algorithm is simple, using a 32 bit accumulator,
 	 * we add sequential 16 bit words to it, and at the end, fold
diff --git a/networking/ping.c b/networking/ping.c
index 47b6ab1b2..5f7e5b9b5 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -217,7 +217,7 @@ static void ping4(len_and_sockaddr *lsa)
 	/*memset(pkt, 0, sizeof(G.packet)); already is */
 	pkt->icmp_type = ICMP_ECHO;
 	pkt->icmp_id = G.myid;
-	pkt->icmp_cksum = inet_cksum((uint16_t *) pkt, sizeof(G.packet));
+	pkt->icmp_cksum = inet_cksum(pkt, sizeof(G.packet));
 
 	xsendto(pingsock, G.packet, DEFDATALEN + ICMP_MINLEN, &lsa->u.sa, lsa->len);
 
@@ -529,7 +529,7 @@ static void sendping4(int junk UNUSED_PARAM)
 		/* No hton: we'll read it back on the same machine */
 		*(uint32_t*)&pkt->icmp_dun = G.cur_us = monotonic_us();
 
-	pkt->icmp_cksum = inet_cksum((uint16_t *) pkt, datalen + ICMP_MINLEN);
+	pkt->icmp_cksum = inet_cksum(pkt, datalen + ICMP_MINLEN);
 
 	sendping_tail(sendping4, ICMP_MINLEN);
 }
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 5068f654b..1c4dc3e4a 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -468,7 +468,7 @@ send_probe(int seq, int ttl)
 			/* Always calculate checksum for icmp packets */
 			outicmp->icmp_cksum = 0;
 			outicmp->icmp_cksum = inet_cksum(
-					(uint16_t *)outicmp,
+					outicmp,
 					((char*)outip + packlen) - (char*)outicmp
 			);
 			if (outicmp->icmp_cksum == 0)
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
index fc2d672b7..ac8af91d3 100644
--- a/networking/udhcp/d6_dhcpc.c
+++ b/networking/udhcp/d6_dhcpc.c
@@ -947,7 +947,7 @@ static NOINLINE int d6_recv_raw_packet(struct in6_addr *peer_ipv6, struct d6_pac
 //	packet.ip.tot_len = packet.udp.len; /* yes, this is needed */
 //	check = packet.udp.check;
 //	packet.udp.check = 0;
-//	if (check && check != inet_cksum((uint16_t *)&packet, bytes)) {
+//	if (check && check != inet_cksum(&packet, bytes)) {
 //		log1("packet with bad UDP checksum received, ignoring");
 //		return -2;
 //	}
diff --git a/networking/udhcp/d6_packet.c b/networking/udhcp/d6_packet.c
index 446497e15..167a813e3 100644
--- a/networking/udhcp/d6_packet.c
+++ b/networking/udhcp/d6_packet.c
@@ -103,7 +103,7 @@ int FAST_FUNC d6_send_raw_packet(
 	 */
 	packet.ip6.ip6_hlim = IPPROTO_UDP;
 	packet.udp.check = inet_cksum(
-				(uint16_t *)&packet + 2,
+				(uint8_t *)&packet + 4,
 				offsetof(struct ip6_udp_d6_packet, data) - 4 + d6_pkt_size
 	);
 	/* fix 'hop limit' and 'next header' after UDP checksumming */
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index e13eb3f9f..66aa38c20 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -935,7 +935,7 @@ static NOINLINE int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
 	/* verify IP checksum */
 	check = packet.ip.check;
 	packet.ip.check = 0;
-	if (check != inet_cksum((uint16_t *)&packet.ip, sizeof(packet.ip))) {
+	if (check != inet_cksum(&packet.ip, sizeof(packet.ip))) {
 		log1s("bad IP header checksum, ignoring");
 		return -2;
 	}
@@ -960,7 +960,7 @@ static NOINLINE int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
 	packet.ip.tot_len = packet.udp.len; /* yes, this is needed */
 	check = packet.udp.check;
 	packet.udp.check = 0;
-	if (check && check != inet_cksum((uint16_t *)&packet, bytes)) {
+	if (check && check != inet_cksum(&packet, bytes)) {
 		log1s("packet with bad UDP checksum received, ignoring");
 		return -2;
 	}
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 6d4375237..51374646d 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -164,14 +164,14 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
 	packet.udp.len = htons(UDP_DHCP_SIZE - padding);
 	/* for UDP checksumming, ip.len is set to UDP packet len */
 	packet.ip.tot_len = packet.udp.len;
-	packet.udp.check = inet_cksum((uint16_t *)&packet,
+	packet.udp.check = inet_cksum(&packet,
 			IP_UDP_DHCP_SIZE - padding);
 	/* but for sending, it is set to IP packet len */
 	packet.ip.tot_len = htons(IP_UDP_DHCP_SIZE - padding);
 	packet.ip.ihl = sizeof(packet.ip) >> 2;
 	packet.ip.version = IPVERSION;
 	packet.ip.ttl = IPDEFTTL;
-	packet.ip.check = inet_cksum((uint16_t *)&packet.ip, sizeof(packet.ip));
+	packet.ip.check = inet_cksum(&packet.ip, sizeof(packet.ip));
 
 	udhcp_dump_packet(dhcp_pkt);
 	result = sendto(fd, &packet, IP_UDP_DHCP_SIZE - padding, /*flags:*/ 0,


More information about the busybox-cvs mailing list