[PATCH] Replace susv3 legacy function with modern equivalents

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 nuttcp-6.1.2.c |   90 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

Index: nuttcp-6.1.2/nuttcp-6.1.2.c
===================================================================
--- nuttcp-6.1.2.orig/nuttcp-6.1.2.c
+++ nuttcp-6.1.2/nuttcp-6.1.2.c
@@ -1925,11 +1925,11 @@
 	if (udp && !haverateopt)
 		rate = DEFAULT_UDP_RATE;
 
-	bzero((char *)&frominet, sizeof(frominet));
-	bzero((char *)&clientaddr, sizeof(clientaddr));
+	memset((char *)&frominet, 0, sizeof(frominet));
+	memset((char *)&clientaddr, 0, sizeof(clientaddr));
 
 #ifdef AF_INET6
-	bzero((char *)&clientaddr6, sizeof(clientaddr6));
+	memset((char *)&clientaddr6, 0, sizeof(clientaddr6));
 	clientscope6 = 0;
 #endif
 
@@ -1985,7 +1985,7 @@
 		}
 
 		while (stream_idx <= nstream) {
-			bzero(&hints, sizeof(hints));
+			memset(&hints, 0, sizeof(hints));
 			res[stream_idx] = NULL;
 			if (explicitaf) hints.ai_family = af;
 			if ((cp2 = strchr(cp1, '/'))) {
@@ -3013,12 +3013,12 @@
 		if ((stream_idx > 0) && skip_data)
 			break;
 
-		bzero((char *)&sinme[stream_idx], sizeof(sinme[stream_idx]));
-		bzero((char *)&sinhim[stream_idx], sizeof(sinhim[stream_idx]));
+		memset((char *)&sinme[stream_idx], 0, sizeof(sinme[stream_idx]));
+		memset((char *)&sinhim[stream_idx], 0, sizeof(sinhim[stream_idx]));
 
 #ifdef AF_INET6
-		bzero((char *)&sinme6[stream_idx], sizeof(sinme6[stream_idx]));
-		bzero((char *)&sinhim6[stream_idx], sizeof(sinhim6[stream_idx]));
+		memset((char *)&sinme6[stream_idx], 0, sizeof(sinme6[stream_idx]));
+		memset((char *)&sinhim6[stream_idx], 0, sizeof(sinhim6[stream_idx]));
 #endif
 
 		if (((trans && !reverse) && (stream_idx > 0)) ||
@@ -3028,15 +3028,15 @@
 			if (client) {
 				if (af == AF_INET) {
 				    sinhim[stream_idx].sin_family = af;
-				    bcopy((char *)&(((struct sockaddr_in *)res[stream_idx]->ai_addr)->sin_addr),
-					  (char *)&sinhim[stream_idx].sin_addr.s_addr,
+				    memcpy((char *)&sinhim[stream_idx].sin_addr.s_addr,
+					  (char *)&(((struct sockaddr_in *)res[stream_idx]->ai_addr)->sin_addr),
 					  sizeof(sinhim[stream_idx].sin_addr.s_addr));
 				}
 #ifdef AF_INET6
 				else if (af == AF_INET6) {
 				    sinhim6[stream_idx].sin6_family = af;
-				    bcopy((char *)&(((struct sockaddr_in6 *)res[stream_idx]->ai_addr)->sin6_addr),
-					  (char *)&sinhim6[stream_idx].sin6_addr.s6_addr,
+				    memcpy((char *)&sinhim6[stream_idx].sin6_addr.s6_addr,
+					  (char *)&(((struct sockaddr_in6 *)res[stream_idx]->ai_addr)->sin6_addr),
 					  sizeof(sinhim6[stream_idx].sin6_addr.s6_addr));
 				    sinhim6[stream_idx].sin6_scope_id = ((struct sockaddr_in6 *)res[stream_idx]->ai_addr)->sin6_scope_id;
 				}
@@ -3113,8 +3113,8 @@
 				 * to the multicast group
 				 */
 				if (af == AF_INET) {
-				    bcopy((char *)&sinhim[1].sin_addr.s_addr,
-					(char *)&save_sinhim.sin_addr.s_addr,
+				    memcpy((char *)&save_sinhim.sin_addr.s_addr,
+					(char *)&sinhim[1].sin_addr.s_addr,
 					sizeof(struct in_addr));
 				    if (!client && (irvers >= 50505)) {
 					struct sockaddr_in peer;
@@ -3124,8 +3124,8 @@
 						      &peerlen) < 0) {
 						err("getpeername");
 					}
-					bcopy((char *)&peer.sin_addr.s_addr,
-					    (char *)&sinhim[1].sin_addr.s_addr,
+					memcpy((char *)&sinhim[1].sin_addr.s_addr,
+					    (char *)&peer.sin_addr.s_addr,
 					    sizeof(struct in_addr));
 				    }
 				    else {
@@ -3136,8 +3136,8 @@
 							&melen) < 0) {
 						err("getsockname");
 					}
-					bcopy((char *)&me.sin_addr.s_addr,
-					    (char *)&sinhim[1].sin_addr.s_addr,
+					memcpy((char *)&sinhim[1].sin_addr.s_addr,
+					    (char *)&me.sin_addr.s_addr,
 					    sizeof(struct in_addr));
 				    }
 				    sinhim[1].sin_addr.s_addr &=
@@ -4197,13 +4197,13 @@
 						&melen) < 0) {
 					err("getsockname");
 				}
-				bcopy((char *)&me.sin_addr.s_addr,
-				      (char *)&mc_group.imr_multiaddr.s_addr,
+				memcpy((char *)&mc_group.imr_multiaddr.s_addr,
+				      (char *)&me.sin_addr.s_addr,
 				      sizeof(struct in_addr));
 			}
 			else {
-				bcopy((char *)&peer.sin_addr.s_addr,
-				      (char *)&mc_group.imr_multiaddr.s_addr,
+				memcpy((char *)&mc_group.imr_multiaddr.s_addr,
+				      (char *)&peer.sin_addr.s_addr,
 				      sizeof(struct in_addr));
 			}
 			mc_group.imr_multiaddr.s_addr &= htonl(0xFFFFFF);
@@ -4330,12 +4330,12 @@
 			if(udp) {
 				strcpy(buf, "BOD0");
 				if (multicast) {
-				    bcopy((char *)&sinhim[1].sin_addr.s_addr,
-					  (char *)&save_mc.sin_addr.s_addr,
-					  sizeof(struct in_addr));
-				    bcopy((char *)&save_sinhim.sin_addr.s_addr,
+				    memcpy((char *)&save_mc.sin_addr.s_addr,
 					  (char *)&sinhim[1].sin_addr.s_addr,
 					  sizeof(struct in_addr));
+				    memcpy((char *)&sinhim[1].sin_addr.s_addr,
+					  (char *)&save_sinhim.sin_addr.s_addr,
+					  sizeof(struct in_addr));
 				}
 				(void)Nwrite( fd[stream_idx + 1], buf, 4 ); /* rcvr start */
 				if (two_bod) {
@@ -4344,8 +4344,8 @@
 					(void)Nwrite( fd[stream_idx + 1], buf, 4 ); /* rcvr start */
 				}
 				if (multicast) {
-				    bcopy((char *)&save_mc.sin_addr.s_addr,
-					  (char *)&sinhim[1].sin_addr.s_addr,
+				    memcpy((char *)&sinhim[1].sin_addr.s_addr,
+					  (char *)&save_mc.sin_addr.s_addr,
 					  sizeof(struct in_addr));
 				}
 				if (timeout)
@@ -4361,7 +4361,7 @@
 				fflush(stdout);
 			}
 			if (udplossinfo)
-				bcopy(&nbytes, buf + 24, 8);
+				memcpy(buf + 24, &nbytes, 8);
 			if (!udp && interval && !(format & NORETRANS) &&
 			    ((retransinfo == 1) ||
 			     ((retransinfo >= 2) &&
@@ -4372,13 +4372,13 @@
 					tmp = 0x5254524Eu;	/* "RTRN" */
 				else
 					tmp = 0x48525452u;	/* "HRTR" */
-				bcopy(&nretrans, buf + 24, 4);
-				bcopy(&tmp, buf + 28, 4);
+				memcpy(buf + 24, &nretrans, 4);
+				memcpy(buf + 28, &tmp, 4);
 			}
 			else {
 				send_retrans = 0;
 				if (!udp)
-					bzero(buf + 24, 8);
+					memset(buf + 24, 0, 8);
 			}
 			if (nbuf == INT_MAX)
 				nbuf = ULLONG_MAX;
@@ -4423,12 +4423,12 @@
 				nbytes += buflen;
 				cnt = 0;
 				if (udplossinfo)
-					bcopy(&nbytes, buf + 24, 8);
+					memcpy(buf + 24, &nbytes, 8);
 				if (send_retrans) {
 					nretrans = get_retrans(
 							fd[stream_idx + 1]);
 					nretrans -= iretrans;
-					bcopy(&nretrans, buf + 24, 4);
+					memcpy(buf + 24, &nretrans, 4);
 				}
 				stream_idx++;
 				stream_idx = stream_idx % nstream;
@@ -4523,8 +4523,8 @@
 				nbytes += cnt;
 			if(udp) {
 				if (multicast)
-				    bcopy((char *)&save_sinhim.sin_addr.s_addr,
-					  (char *)&sinhim[1].sin_addr.s_addr,
+				    memcpy((char *)&sinhim[1].sin_addr.s_addr,
+					  (char *)&save_sinhim.sin_addr.s_addr,
 					  sizeof(struct in_addr));
 				strcpy(buf, "EOD0");
 				(void)Nwrite( fd[stream_idx + 1], buf, 4 ); /* rcvr end */
@@ -4532,7 +4532,7 @@
 		} else {
 			first_read = 1;
 			need_swap = 0;
-			bzero(buf + 24, 8);
+			memset(buf + 24, 0, 8);
 			if (udp) {
 			    ntbytesc = 0;
 			    got_eod0 = 0;
@@ -4584,7 +4584,7 @@
 				     * goes off right here */
 				    if (udplossinfo) {
 					    if (first_read) {
-						    bcopy(buf + 24, &ntbytesc,
+						    memcpy(&ntbytesc, buf + 24,
 								8);
 						    first_read = 0;
 						    if (ntbytesc > 0x100000000ull)
@@ -4598,7 +4598,7 @@
 						    }
 					    }
 					    if (!need_swap)
-						    bcopy(buf + 24, &ntbytesc,
+						    memcpy(&ntbytesc, buf + 24,
 								8);
 					    else {
 						    cp1 = (char *)&ntbytesc;
@@ -4627,8 +4627,8 @@
 					    uint32_t tmp;
 
 					    first_read = 0;
-					    bcopy(buf + 24, &nretrans, 4);
-					    bcopy(buf + 28, &tmp, 4);
+					    memcpy(&nretrans, buf + 24, 4);
+					    memcpy(&tmp, buf + 28, 4);
 					    if (tmp == 0x5254524Eu) {
 						    /* "RTRN" */
 						    retransinfo = 1;
@@ -4661,7 +4661,7 @@
 				    }
 				    if (read_retrans) {
 					    if (!need_swap)
-						    bcopy(buf + 24, &nretrans,
+						    memcpy(&nretrans, buf + 24,
 								4);
 					    else {
 						    cp1 = (char *)&nretrans;
@@ -5327,10 +5327,10 @@
 		itimer.it_interval.tv_usec = 0;
 		setitimer(ITIMER_REAL, &itimer, 0);
 		signal(SIGALRM, SIG_DFL);
-		bzero((char *)&frominet, sizeof(frominet));
-		bzero((char *)&clientaddr, sizeof(clientaddr));
+		memset((char *)&frominet, 0, sizeof(frominet));
+		memset((char *)&clientaddr, 0, sizeof(clientaddr));
 #ifdef AF_INET6
-		bzero((char *)&clientaddr6, sizeof(clientaddr));
+		memset((char *)&clientaddr6, 0, sizeof(clientaddr));
 		clientscope6 = 0;
 #endif
 		cput = 0.000001;
