--- /dev/null
+[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;