Subject: kern/6796: partial bcopy->memcpy conversion for sys/net
To: None <gnats-bugs@gnats.netbsd.org>
From: None <erik@mediator.uni-c.dk>
List: netbsd-bugs
Date: 01/12/1999 23:38:03
>Number: 6796
>Category: kern
>Synopsis: partial bcopy->memcpy conversion for sys/net
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people (Kernel Bug People)
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Jan 12 14:50:02 1999
>Last-Modified:
>Originator: Erik Bertelsen
>Organization:
>Release: NetBSD-current 12 Jan 1999
>Environment:
System: NetBSD q610.ebe.uni-c.dk 1.3I NetBSD 1.3I (Q610) #90: Tue Jan 12 20:15:14 MET 1999 erik@q610.ebe.uni-c.dk:/home/src/sys/arch/mac68k/compile/Q610 mac68k
(really NetBSD/macppc)
>Description:
In my home-grown linux based cross compilation setup for NetBSD/macppc, I have made the patches
below to change calls of bcopy into equivalent calls to memcpy in some of the files in
sys/net/, but some files still remain untouched (because they are not used in my kernel).
I send these patches to assist in the ongoing bxxx->memxxx conversion of the kernel
sources. If this assistance is unwanted or collides with other work, a discrete hint
to me will stop me in sending further PR's in this area.
Notice that I have not done anything to remove the redundant typecasts to many of
the arguments to memcpy, this can be done lateron, or (if wanted) I can supply an
update of my patch with my suggestions for which typecasts should be removed.
best regards
Erik Bertelsen
>How-To-Repeat:
>Fix:
Index: if.c
===================================================================
RCS file: /home/cvs-base/src/sys/net/if.c,v
retrieving revision 1.1.1.10
diff -c -r1.1.1.10 if.c
*** if.c 1998/12/11 18:24:40 1.1.1.10
--- if.c 1999/01/12 22:15:32
***************
*** 97,103 ****
struct ifaddr **q = (struct ifaddr **)
malloc(n, M_IFADDR, M_WAITOK);
if (ifnet_addrs) {
! bcopy((caddr_t)ifnet_addrs, (caddr_t)q, n/2);
free((caddr_t)ifnet_addrs, M_IFADDR);
}
ifnet_addrs = q;
--- 97,103 ----
struct ifaddr **q = (struct ifaddr **)
malloc(n, M_IFADDR, M_WAITOK);
if (ifnet_addrs) {
! memcpy((caddr_t)q, (caddr_t)ifnet_addrs, n/2);
free((caddr_t)ifnet_addrs, M_IFADDR);
}
ifnet_addrs = q;
***************
*** 118,124 ****
sdl = (struct sockaddr_dl *)(ifa + 1);
sdl->sdl_len = socksize;
sdl->sdl_family = AF_LINK;
! bcopy(ifp->if_xname, sdl->sdl_data, namelen);
sdl->sdl_nlen = namelen;
sdl->sdl_index = ifp->if_index;
sdl->sdl_type = ifp->if_type;
--- 118,124 ----
sdl = (struct sockaddr_dl *)(ifa + 1);
sdl->sdl_len = socksize;
sdl->sdl_family = AF_LINK;
! memcpy(sdl->sdl_data, ifp->if_xname, namelen);
sdl->sdl_nlen = namelen;
sdl->sdl_index = ifp->if_index;
sdl->sdl_type = ifp->if_type;
***************
*** 591,597 ****
ifrp = ifc->ifc_req;
for (ifp = ifnet.tqh_first;
space >= sizeof (ifr) && ifp != 0; ifp = ifp->if_list.tqe_next) {
! bcopy(ifp->if_xname, ifr.ifr_name, IFNAMSIZ);
if ((ifa = ifp->if_addrlist.tqh_first) == 0) {
bzero((caddr_t)&ifr.ifr_addr, sizeof(ifr.ifr_addr));
error = copyout((caddr_t)&ifr, (caddr_t)ifrp,
--- 591,597 ----
ifrp = ifc->ifc_req;
for (ifp = ifnet.tqh_first;
space >= sizeof (ifr) && ifp != 0; ifp = ifp->if_list.tqe_next) {
! memcpy(ifr.ifr_name, ifp->if_xname, IFNAMSIZ);
if ((ifa = ifp->if_addrlist.tqh_first) == 0) {
bzero((caddr_t)&ifr.ifr_addr, sizeof(ifr.ifr_addr));
error = copyout((caddr_t)&ifr, (caddr_t)ifrp,
Index: if_ethersubr.c
===================================================================
RCS file: /home/cvs-base/src/sys/net/if_ethersubr.c,v
retrieving revision 1.1.1.13
diff -c -r1.1.1.13 if_ethersubr.c
*** if_ethersubr.c 1998/12/11 18:24:42 1.1.1.13
--- if_ethersubr.c 1999/01/12 22:15:32
***************
*** 180,187 ****
#ifdef INET
case AF_INET:
if (m->m_flags & M_BCAST)
! bcopy((caddr_t)etherbroadcastaddr, (caddr_t)edst,
! sizeof(edst));
else if (m->m_flags & M_MCAST) {
ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr,
--- 180,187 ----
#ifdef INET
case AF_INET:
if (m->m_flags & M_BCAST)
! memcpy((caddr_t)edst, (caddr_t)etherbroadcastaddr,
! sizeof(edst));
else if (m->m_flags & M_MCAST) {
ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr,
***************
*** 198,208 ****
case AF_ARP:
ah = mtod(m, struct arphdr *);
if (m->m_flags & M_BCAST)
! bcopy((caddr_t)etherbroadcastaddr, (caddr_t)edst,
! sizeof(edst));
else
! bcopy((caddr_t)ar_tha(ah),
! (caddr_t)edst, sizeof(edst));
ah->ar_hrd = htons(ARPHRD_ETHER);
--- 198,208 ----
case AF_ARP:
ah = mtod(m, struct arphdr *);
if (m->m_flags & M_BCAST)
! memcpy((caddr_t)edst, (caddr_t)etherbroadcastaddr,
! sizeof(edst));
else
! memcpy((caddr_t)edst, (caddr_t)ar_tha(ah),
! sizeof(edst));
ah->ar_hrd = htons(ARPHRD_ETHER);
***************
*** 248,257 ****
M_PREPEND(m, sizeof(struct llc), M_WAIT);
llc.llc_dsap = llc.llc_ssap = LLC_SNAP_LSAP;
llc.llc_control = LLC_UI;
! bcopy(at_org_code, llc.llc_snap_org_code,
! sizeof(llc.llc_snap_org_code));
llc.llc_snap_ether_type = htons(ETHERTYPE_ATALK);
! bcopy(&llc, mtod(m, caddr_t), sizeof(struct llc));
etype = htons(m->m_pkthdr.len);
} else {
etype = htons(ETHERTYPE_ATALK);
--- 248,257 ----
M_PREPEND(m, sizeof(struct llc), M_WAIT);
llc.llc_dsap = llc.llc_ssap = LLC_SNAP_LSAP;
llc.llc_control = LLC_UI;
! memcpy(llc.llc_snap_org_code, at_org_code,
! sizeof(llc.llc_snap_org_code));
llc.llc_snap_ether_type = htons(ETHERTYPE_ATALK);
! memcpy(mtod(m, caddr_t), &llc, sizeof(struct llc));
etype = htons(m->m_pkthdr.len);
} else {
etype = htons(ETHERTYPE_ATALK);
***************
*** 261,268 ****
#ifdef NS
case AF_NS:
etype = htons(ETHERTYPE_NS);
! bcopy((caddr_t)&(((struct sockaddr_ns *)dst)->sns_addr.x_host),
! (caddr_t)edst, sizeof (edst));
if (!bcmp((caddr_t)edst, (caddr_t)&ns_thishost, sizeof(edst)))
return (looutput(ifp, m, dst, rt));
/* If broadcasting on a simplex interface, loopback a copy */
--- 261,268 ----
#ifdef NS
case AF_NS:
etype = htons(ETHERTYPE_NS);
! memcpy((caddr_t)edst, (caddr_t)&(((struct sockaddr_ns *)dst)->sns_addr.x_host),
! sizeof (edst));
if (!bcmp((caddr_t)edst, (caddr_t)&ns_thishost, sizeof(edst)))
return (looutput(ifp, m, dst, rt));
/* If broadcasting on a simplex interface, loopback a copy */
***************
*** 273,280 ****
#ifdef IPX
case AF_IPX:
etype = htons(ETHERTYPE_IPX);
! bcopy((caddr_t)&(((struct sockaddr_ipx *)dst)->sipx_addr.x_host),
! (caddr_t)edst, sizeof (edst));
/* If broadcasting on a simplex interface, loopback a copy */
if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))
mcopy = m_copy(m, 0, (int)M_COPYALL);
--- 273,280 ----
#ifdef IPX
case AF_IPX:
etype = htons(ETHERTYPE_IPX);
! memcpy((caddr_t)edst, (caddr_t)&(((struct sockaddr_ipx *)dst)->sipx_addr.x_host),
! sizeof (edst));
/* If broadcasting on a simplex interface, loopback a copy */
if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))
mcopy = m_copy(m, 0, (int)M_COPYALL);
***************
*** 288,294 ****
if (rt && (sdl = (struct sockaddr_dl *)rt->rt_gateway) &&
sdl->sdl_family == AF_LINK && sdl->sdl_alen > 0) {
! bcopy(LLADDR(sdl), (caddr_t)edst, sizeof(edst));
} else {
error = iso_snparesolve(ifp, (struct sockaddr_iso *)dst,
(char *)edst, &snpalen);
--- 288,294 ----
if (rt && (sdl = (struct sockaddr_dl *)rt->rt_gateway) &&
sdl->sdl_family == AF_LINK && sdl->sdl_alen > 0) {
! memcpy((caddr_t)edst, LLADDR(sdl), sizeof(edst));
} else {
error = iso_snparesolve(ifp, (struct sockaddr_iso *)dst,
(char *)edst, &snpalen);
***************
*** 303,312 ****
M_PREPEND(mcopy, sizeof (*eh), M_DONTWAIT);
if (mcopy) {
eh = mtod(mcopy, struct ether_header *);
! bcopy((caddr_t)edst,
! (caddr_t)eh->ether_dhost, sizeof (edst));
! bcopy(LLADDR(ifp->if_sadl),
! (caddr_t)eh->ether_shost, sizeof (edst));
}
}
M_PREPEND(m, 3, M_DONTWAIT);
--- 303,310 ----
M_PREPEND(mcopy, sizeof (*eh), M_DONTWAIT);
if (mcopy) {
eh = mtod(mcopy, struct ether_header *);
! memcpy((caddr_t)eh->ether_dhost, (caddr_t)edst, sizeof (edst));
! memcpy((caddr_t)eh->ether_shost, LLADDR(ifp->if_sadl), sizeof (edst));
}
}
M_PREPEND(m, 3, M_DONTWAIT);
***************
*** 335,352 ****
if (sdl && sdl->sdl_family == AF_LINK
&& sdl->sdl_alen > 0) {
! bcopy(LLADDR(sdl), (char *)edst,
! sizeof(edst));
} else goto bad; /* Not a link interface ? Funny ... */
if ((ifp->if_flags & IFF_SIMPLEX) && (*edst & 1) &&
(mcopy = m_copy(m, 0, (int)M_COPYALL))) {
M_PREPEND(mcopy, sizeof (*eh), M_DONTWAIT);
if (mcopy) {
eh = mtod(mcopy, struct ether_header *);
! bcopy((caddr_t)edst,
! (caddr_t)eh->ether_dhost, sizeof (edst));
! bcopy(LLADDR(ifp->if_sadl),
! (caddr_t)eh->ether_shost, sizeof (edst));
}
}
etype = htons(m->m_pkthdr.len);
--- 333,347 ----
if (sdl && sdl->sdl_family == AF_LINK
&& sdl->sdl_alen > 0) {
! memcpy((char *edst), LLADDR(sdl), sizeof(edst));
} else goto bad; /* Not a link interface ? Funny ... */
if ((ifp->if_flags & IFF_SIMPLEX) && (*edst & 1) &&
(mcopy = m_copy(m, 0, (int)M_COPYALL))) {
M_PREPEND(mcopy, sizeof (*eh), M_DONTWAIT);
if (mcopy) {
eh = mtod(mcopy, struct ether_header *);
! memcpy((caddr_t)eh->ether_dhost, (caddr_t)edst, sizeof (edst));
! memcpy((caddr_t)eh->ether_shost, LLADDR(ifp->if_sadl), sizeof (edst));
}
}
etype = htons(m->m_pkthdr.len);
***************
*** 370,381 ****
case pseudo_AF_HDRCMPLT:
hdrcmplt = 1;
eh = (struct ether_header *)dst->sa_data;
! bcopy((caddr_t)eh->ether_shost, (caddr_t)esrc, sizeof (esrc));
/* FALLTHROUGH */
case AF_UNSPEC:
eh = (struct ether_header *)dst->sa_data;
! bcopy((caddr_t)eh->ether_dhost, (caddr_t)edst, sizeof (edst));
/* AF_UNSPEC doesn't swap the byte order of the ether_type. */
etype = eh->ether_type;
break;
--- 365,376 ----
case pseudo_AF_HDRCMPLT:
hdrcmplt = 1;
eh = (struct ether_header *)dst->sa_data;
! memcpy((caddr_t)esrc, (caddr_t)eh->ether_shost, sizeof (esrc));
/* FALLTHROUGH */
case AF_UNSPEC:
eh = (struct ether_header *)dst->sa_data;
! memcpy((caddr_t)edst, (caddr_t)eh->ether_dhost, sizeof (edst));
/* AF_UNSPEC doesn't swap the byte order of the ether_type. */
etype = eh->ether_type;
break;
***************
*** 397,411 ****
if (m == 0)
senderr(ENOBUFS);
eh = mtod(m, struct ether_header *);
! bcopy((caddr_t)&etype,(caddr_t)&eh->ether_type,
! sizeof(eh->ether_type));
! bcopy((caddr_t)edst, (caddr_t)eh->ether_dhost, sizeof (edst));
if (hdrcmplt)
! bcopy((caddr_t)esrc, (caddr_t)eh->ether_shost,
! sizeof(eh->ether_shost));
else
! bcopy(LLADDR(ifp->if_sadl), (caddr_t)eh->ether_shost,
! sizeof(eh->ether_shost));
s = splimp();
/*
* Queue message on interface, and start output if interface
--- 392,406 ----
if (m == 0)
senderr(ENOBUFS);
eh = mtod(m, struct ether_header *);
! memcpy((caddr_t)&eh->ether_type, (caddr_t)&etype,
! sizeof(eh->ether_type));
! memcpy((caddr_t)eh->ether_dhost, (caddr_t)edst, sizeof (edst));
if (hdrcmplt)
! memcpy((caddr_t)eh->ether_shost, (caddr_t)esrc,
! sizeof(eh->ether_shost));
else
! memcpy((caddr_t)eh->ether_shost, LLADDR(ifp->if_sadl),
! sizeof(eh->ether_shost));
s = splimp();
/*
* Queue message on interface, and start output if interface
***************
*** 595,602 ****
l->llc_dsap = l->llc_ssap;
l->llc_ssap = c;
if (m->m_flags & (M_BCAST | M_MCAST))
! bcopy(LLADDR(ifp->if_sadl),
! (caddr_t)eh->ether_dhost, 6);
sa.sa_family = AF_UNSPEC;
sa.sa_len = sizeof(sa);
eh2 = (struct ether_header *)sa.sa_data;
--- 590,596 ----
l->llc_dsap = l->llc_ssap;
l->llc_ssap = c;
if (m->m_flags & (M_BCAST | M_MCAST))
! memcpy((caddr_t)eh->ether_dhost, LLADDR(ifp->if_sadl), 6);
sa.sa_family = AF_UNSPEC;
sa.sa_len = sizeof(sa);
eh2 = (struct ether_header *)sa.sa_data;
***************
*** 698,704 ****
sdl->sdl_family == AF_LINK) {
sdl->sdl_type = IFT_ETHER;
sdl->sdl_alen = ifp->if_addrlen;
! bcopy((caddr_t)lla, LLADDR(sdl), ifp->if_addrlen);
}
LIST_INIT(&((struct ethercom *)ifp)->ec_multiaddrs);
ifp->if_broadcastaddr = etherbroadcastaddr;
--- 692,698 ----
sdl->sdl_family == AF_LINK) {
sdl->sdl_type = IFT_ETHER;
sdl->sdl_alen = ifp->if_addrlen;
! memcpy(LLADDR(sdl), (caddr_t)lla, ifp->if_addrlen);
}
LIST_INIT(&((struct ethercom *)ifp)->ec_multiaddrs);
ifp->if_broadcastaddr = etherbroadcastaddr;
***************
*** 726,733 ****
switch (ifr->ifr_addr.sa_family) {
case AF_UNSPEC:
! bcopy(ifr->ifr_addr.sa_data, addrlo, 6);
! bcopy(addrlo, addrhi, 6);
break;
#ifdef INET
--- 720,727 ----
switch (ifr->ifr_addr.sa_family) {
case AF_UNSPEC:
! memcpy(addrlo, ifr->ifr_addr.sa_data, 6);
! memcpy(addrhi, addrlo, 6);
break;
#ifdef INET
***************
*** 739,750 ****
* of the Ethernet multicast addresses used for IP.
* (This is for the sake of IP multicast routers.)
*/
! bcopy(ether_ipmulticast_min, addrlo, 6);
! bcopy(ether_ipmulticast_max, addrhi, 6);
}
else {
ETHER_MAP_IP_MULTICAST(&sin->sin_addr, addrlo);
! bcopy(addrlo, addrhi, 6);
}
break;
#endif
--- 733,744 ----
* of the Ethernet multicast addresses used for IP.
* (This is for the sake of IP multicast routers.)
*/
! memcpy(addrlo, ether_ipmulticast_min, 6);
! memcpy(addrhi, ether_ipmulticast_max, 6);
}
else {
ETHER_MAP_IP_MULTICAST(&sin->sin_addr, addrlo);
! memcpy(addrhi, addrlo, 6);
}
break;
#endif
***************
*** 782,789 ****
splx(s);
return (ENOBUFS);
}
! bcopy(addrlo, enm->enm_addrlo, 6);
! bcopy(addrhi, enm->enm_addrhi, 6);
enm->enm_ec = ec;
enm->enm_refcount = 1;
LIST_INSERT_HEAD(&ec->ec_multiaddrs, enm, enm_list);
--- 776,783 ----
splx(s);
return (ENOBUFS);
}
! memcpy(enm->enm_addrlo, addrlo, 6);
! memcpy(enm->enm_addrhi, addrhi, 6);
enm->enm_ec = ec;
enm->enm_refcount = 1;
LIST_INSERT_HEAD(&ec->ec_multiaddrs, enm, enm_list);
***************
*** 815,822 ****
switch (ifr->ifr_addr.sa_family) {
case AF_UNSPEC:
! bcopy(ifr->ifr_addr.sa_data, addrlo, 6);
! bcopy(addrlo, addrhi, 6);
break;
#ifdef INET
--- 809,816 ----
switch (ifr->ifr_addr.sa_family) {
case AF_UNSPEC:
! memcpy(addrlo, ifr->ifr_addr.sa_data, 6);
! memcpy(addrhi, addrlo, 6);
break;
#ifdef INET
***************
*** 828,839 ****
* to the range of Ethernet multicast addresses used
* for IP.
*/
! bcopy(ether_ipmulticast_min, addrlo, 6);
! bcopy(ether_ipmulticast_max, addrhi, 6);
}
else {
ETHER_MAP_IP_MULTICAST(&sin->sin_addr, addrlo);
! bcopy(addrlo, addrhi, 6);
}
break;
#endif
--- 822,833 ----
* to the range of Ethernet multicast addresses used
* for IP.
*/
! memcpy(addrlo, ether_ipmulticast_min, 6);
! memcpy(addrhi, ether_ipmulticast_max, 6);
}
else {
ETHER_MAP_IP_MULTICAST(&sin->sin_addr, addrlo);
! memcpy(addrhi, addrlo, 6);
}
break;
#endif
Index: radix.h
===================================================================
RCS file: /home/cvs-base/src/sys/net/radix.h,v
retrieving revision 1.1.1.2
diff -c -r1.1.1.2 radix.h
*** radix.h 1997/04/03 15:53:15 1.1.1.2
--- radix.h 1999/01/12 22:15:32
***************
*** 134,146 ****
#ifndef _KERNEL
#define Bcmp(a, b, n) bcmp(((char *)(a)), ((char *)(b)), (n))
! #define Bcopy(a, b, n) bcopy(((char *)(a)), ((char *)(b)), (unsigned)(n))
#define Bzero(p, n) bzero((char *)(p), (int)(n));
#define R_Malloc(p, t, n) (p = (t) malloc((unsigned int)(n)))
#define Free(p) free((char *)p);
#else
#define Bcmp(a, b, n) bcmp(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
! #define Bcopy(a, b, n) bcopy(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
#define Bzero(p, n) bzero((caddr_t)(p), (unsigned)(n));
#define R_Malloc(p, t, n) (p = (t) malloc((unsigned long)(n), M_RTABLE, M_DONTWAIT))
#define Free(p) free((caddr_t)p, M_RTABLE);
--- 134,146 ----
#ifndef _KERNEL
#define Bcmp(a, b, n) bcmp(((char *)(a)), ((char *)(b)), (n))
! #define Bcopy(a, b, n) memcpy(((char *)(b)), ((char *)(a)), (unsigned)(n))
#define Bzero(p, n) bzero((char *)(p), (int)(n));
#define R_Malloc(p, t, n) (p = (t) malloc((unsigned int)(n)))
#define Free(p) free((char *)p);
#else
#define Bcmp(a, b, n) bcmp(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
! #define Bcopy(a, b, n) memcpy(((caddr_t)(b)), ((caddr_t)(a)), (unsigned)(n))
#define Bzero(p, n) bzero((caddr_t)(p), (unsigned)(n));
#define R_Malloc(p, t, n) (p = (t) malloc((unsigned long)(n), M_RTABLE, M_DONTWAIT))
#define Free(p) free((caddr_t)p, M_RTABLE);
Index: raw_usrreq.c
===================================================================
RCS file: /home/cvs-base/src/sys/net/raw_usrreq.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 raw_usrreq.c
*** raw_usrreq.c 1997/01/01 19:22:51 1.1.1.1
--- raw_usrreq.c 1999/01/12 22:15:32
***************
*** 162,168 ****
{
nam->m_len = rp->rcb_laddr->sa_len;
! bcopy(rp->rcb_laddr, mtod(nam, caddr_t), (size_t)nam->m_len);
}
void
--- 162,168 ----
{
nam->m_len = rp->rcb_laddr->sa_len;
! memcpy(mtod(nam, caddr_t), rp->rcb_laddr, (size_t)nam->m_len);
}
void
***************
*** 172,178 ****
{
nam->m_len = rp->rcb_faddr->sa_len;
! bcopy(rp->rcb_faddr, mtod(nam, caddr_t), (size_t)nam->m_len);
}
/*ARGSUSED*/
--- 172,178 ----
{
nam->m_len = rp->rcb_faddr->sa_len;
! memcpy(mtod(nam, caddr_t), rp->rcb_faddr, (size_t)nam->m_len);
}
/*ARGSUSED*/
Index: rtsock.c
===================================================================
RCS file: /home/cvs-base/src/sys/net/rtsock.c,v
retrieving revision 1.1.1.8
diff -c -r1.1.1.8 rtsock.c
*** rtsock.c 1998/12/13 15:21:20 1.1.1.8
--- rtsock.c 1999/01/12 22:15:33
***************
*** 507,513 ****
rtinfo->rti_addrs |= (1 << i);
dlen = ROUNDUP(sa->sa_len);
if (cp) {
! bcopy(sa, cp, (unsigned)dlen);
cp += dlen;
}
len += dlen;
--- 507,513 ----
rtinfo->rti_addrs |= (1 << i);
dlen = ROUNDUP(sa->sa_len);
if (cp) {
! memcpy(cp, sa, (unsigned)dlen);
cp += dlen;
}
len += dlen;
>Audit-Trail:
>Unformatted: