| 668 | #endif |
| 669 | |
| 670 | void |
| 671 | rt_maskedcopy(struct sockaddr *src, struct sockaddr *dst, struct sockaddr *netmask) |
| 672 | { |
| 673 | u_char *cp1 = (u_char *)src; |
| 674 | u_char *cp2 = (u_char *)dst; |
| 675 | u_char *cp3 = (u_char *)netmask; |
| 676 | u_char *cplim = cp2 + *cp3; |
| 677 | u_char *cplim2 = cp2 + *cp1; |
| 678 | |
| 679 | *cp2++ = *cp1++; *cp2++ = *cp1++; /* copies sa_len & sa_family */ |
| 680 | cp3 += 2; |
| 681 | if (cplim > cplim2) |
| 682 | cplim = cplim2; |
| 683 | while (cp2 < cplim) |
| 684 | *cp2++ = *cp1++ & *cp3++; |
| 685 | if (cp2 < cplim2) |
| 686 | bzero((caddr_t)cp2, (unsigned)(cplim2 - cp2)); |
| 687 | } |
| 688 | |
| 689 | /* |
| 690 | * Announce interface address arrival/withdraw |
no test coverage detected