diff -urN mrouted-3.9-beta3.0rig/cfparse.y mrouted-3.9-beta3/cfparse.y
--- mrouted-3.9-beta3.0rig/cfparse.y	1998-03-01 02:48:58.000000000 +0100
+++ mrouted-3.9-beta3/cfparse.y	2009-01-14 21:17:00.000000000 +0100
@@ -583,8 +583,7 @@
 				  if (hp->h_addr_list[1])
 				    fatal("Hostname %s does not %s",
 					$1, "map to a unique address");
-
-				  bcopy(hp->h_addr_list[0], &$$,
+				  memmove (&$$,	hp->h_addr_list[0],
 					    hp->h_length);
 				}
 
diff -urN mrouted-3.9-beta3.0rig/config.c mrouted-3.9-beta3/config.c
--- mrouted-3.9-beta3.0rig/config.c	1998-01-06 02:57:41.000000000 +0100
+++ mrouted-3.9-beta3/config.c	2009-01-14 21:18:59.000000000 +0100
@@ -89,7 +89,7 @@
 	 * SIOCGIFFLAGS stomps over it because the requests
 	 * are returned in a union.)
 	 */
-	bcopy(ifrp->ifr_name, ifr.ifr_name, sizeof(ifr.ifr_name));
+	memmove	(ifr.ifr_name,	ifrp->ifr_name,	sizeof(ifr.ifr_name));
 
 	/*
 	 * Ignore loopback interfaces and interfaces that do not support
diff -urN mrouted-3.9-beta3.0rig/defs.h mrouted-3.9-beta3/defs.h
--- mrouted-3.9-beta3.0rig/defs.h	2009-01-14 21:12:22.000000000 +0100
+++ mrouted-3.9-beta3/defs.h	2009-01-14 21:20:05.000000000 +0100
@@ -116,8 +116,6 @@
 #endif /* RSRR */
 
 #ifdef SYSV
-#define bcopy(a, b, c)	memcpy(b, a, c)
-#define bzero(s, n) 	memset((s), 0, (n))
 #define setlinebuf(s)	setvbuf(s, NULL, _IOLBF, 0)
 #endif
 
diff -urN mrouted-3.9-beta3.0rig/igmp.c mrouted-3.9-beta3/igmp.c
--- mrouted-3.9-beta3.0rig/igmp.c	1998-01-06 02:57:43.000000000 +0100
+++ mrouted-3.9-beta3/igmp.c	2009-01-14 21:27:41.000000000 +0100
@@ -56,7 +56,7 @@
     k_set_loop(FALSE);		/* disable multicast loopback     */
 
     ip         = (struct ip *)send_buf;
-    bzero(ip, sizeof(struct ip));
+    memset(ip, 0, sizeof(struct ip));
     /*
      * Fields zeroed that aren't filled in later:
      * - IP ID (let the kernel fill it in)
@@ -421,7 +421,7 @@
 	}
     }
 
-    bzero(&sdst, sizeof(sdst));
+    memset(&sdst, 0, sizeof(sdst));
     sdst.sin_family = AF_INET;
 #ifdef HAVE_SA_LEN
     sdst.sin_len = sizeof(sdst);
diff -urN mrouted-3.9-beta3.0rig/ipip.c mrouted-3.9-beta3/ipip.c
--- mrouted-3.9-beta3.0rig/ipip.c	1998-01-06 02:57:45.000000000 +0100
+++ mrouted-3.9-beta3/ipip.c	2009-01-14 21:28:19.000000000 +0100
@@ -61,7 +61,7 @@
     ip = v->uv_encap_hdr = (struct ip *)malloc(sizeof(struct ip));
     if (ip == NULL)
 	log(LOG_ERR, 0, "out of memory");
-    bzero(ip, sizeof(struct ip));
+    memset(ip, 0, sizeof(struct ip));
     /*
      * Fields zeroed that aren't filled in later:
      * - IP ID (let the kernel fill it in)
@@ -111,7 +111,7 @@
     ip->ip_len = htons(ip->ip_len);
 #endif
 
-    bzero(&sdst, sizeof(sdst));
+    memset(&sdst, 0, sizeof(sdst));
     sdst.sin_family = AF_INET;
 #ifdef HAVE_SA_LEN
     sdst.sin_len = sizeof(sdst);
@@ -123,7 +123,7 @@
     iov[1].iov_base = (caddr_t)send_buf;
     iov[1].iov_len = MIN_IP_HEADER_LEN + IGMP_MINLEN + datalen;
 
-    bzero(&msg, sizeof(msg));
+    memset(&msg, 0, sizeof(msg));
     msg.msg_name = (caddr_t)&sdst;
     msg.msg_namelen = sizeof(sdst);
     msg.msg_iov = iov;
diff -urN mrouted-3.9-beta3.0rig/main.c mrouted-3.9-beta3/main.c
--- mrouted-3.9-beta3.0rig/main.c	2009-01-14 21:12:22.000000000 +0100
+++ mrouted-3.9-beta3/main.c	2009-01-14 21:22:33.000000000 +0100
@@ -429,7 +429,7 @@
     gettimeofday(&curtime, NULL);
     lasttime = curtime;
     for(;;) {
-	bcopy((char *)&readers, (char *)&rfds, sizeof(rfds));
+	memmove	((char *)&rfds,	(char *)&readers,	sizeof(rfds));
 	secs = timer_nextTimer();
 	if (secs == -1)
 	    timeout = NULL;
diff -urN mrouted-3.9-beta3.0rig/prune.c mrouted-3.9-beta3/prune.c
--- mrouted-3.9-beta3.0rig/prune.c	1998-03-01 03:06:32.000000000 +0100
+++ mrouted-3.9-beta3/prune.c	2009-01-14 21:27:06.000000000 +0100
@@ -2450,7 +2450,7 @@
     /* copy the packet to the sending buffer */
     p = send_buf + MIN_IP_HEADER_LEN + IGMP_MINLEN;
     
-    bcopy(data, p, datalen);
+    memmove	(p,	data,	datalen);
     
     p += datalen;
     
@@ -2469,7 +2469,7 @@
      * fill in initial response fields
      */
     resp = (struct tr_resp *)p;
-    bzero(resp, sizeof(struct tr_resp));
+    memset(resp, 0, sizeof(struct tr_resp));
     datalen += RLEN;
 
     resp->tr_qarr    = htonl(((tp.tv_sec + JAN_1970) << 16) + 
diff -urN mrouted-3.9-beta3.0rig/route.c mrouted-3.9-beta3/route.c
--- mrouted-3.9-beta3.0rig/route.c	1998-01-15 01:08:34.000000000 +0100
+++ mrouted-3.9-beta3/route.c	2009-01-14 21:26:37.000000000 +0100
@@ -388,7 +388,8 @@
     else                              r->rt_originwidth = 1;
     r->rt_flags        = 0;
     r->rt_dominants    = (u_int32 *)(r + 1);
-    bzero(r->rt_dominants, numvifs * sizeof(u_int32));
+    memset(r->rt_dominants, 0, numvifs * sizeof(u_int32));
+
     r->rt_groups       = NULL;
     VIFM_CLRALL(r->rt_children);
     NBRM_CLRALL(r->rt_subordinates);
@@ -968,7 +969,7 @@
     bh->bh_dst = dst;
     bh->bh_level = level;
     bh->bh_datalen = datalen;
-    bcopy(p, (char *)(bh + 1), datalen);
+    memmove	((char *)(bh + 1),	p,	datalen);
     v->uv_blasterend += bblen;
 
     if (v->uv_blastertimer == 0) {
diff -urN mrouted-3.9-beta3.0rig/rsrr.c mrouted-3.9-beta3/rsrr.c
--- mrouted-3.9-beta3.0rig/rsrr.c	1998-01-06 02:57:58.000000000 +0100
+++ mrouted-3.9-beta3/rsrr.c	2009-01-14 21:29:18.000000000 +0100
@@ -81,7 +81,7 @@
 	log(LOG_ERR, errno, "Can't create RSRR socket");
 
     unlink(RSRR_SERV_PATH);
-    bzero((char *) &serv_addr, sizeof(serv_addr));
+    memset((char *) &serv_addr, 0, sizeof(serv_addr));
     serv_addr.sun_family = AF_UNIX;
     strcpy(serv_addr.sun_path, RSRR_SERV_PATH);
 #ifdef HAVE_SA_LEN
@@ -107,7 +107,7 @@
 {
     register int rsrr_recvlen;
     
-    bzero((char *) &client_addr, sizeof(client_addr));
+    memset((char *) &client_addr, 0, sizeof(client_addr));
     rsrr_recvlen = recvfrom(rsrr_socket, rsrr_recv_buf, sizeof(rsrr_recv_buf),
 			    0, (struct sockaddr *)&client_addr, &client_length);
     if (rsrr_recvlen < 0) {	
