X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnetutl.c;h=83dbe2bd1dd2dfa5fb16ed4053d9389d956c102b;hp=1ab4c2cb8e9ce727c2daf325dbcf9ff6b65548bc;hb=d8fe2ecdd8dc5caf6f8d6acf2923a0baed64735f;hpb=72bdc05cb7e246e56ed21a25256d441c45fccca8 diff --git a/src/netutl.c b/src/netutl.c index 1ab4c2cb..83dbe2bd 100644 --- a/src/netutl.c +++ b/src/netutl.c @@ -1,7 +1,7 @@ /* netutl.c -- some supporting network utility code - Copyright (C) 1998-2003 Ivo Timmermans - 2000-2003 Guus Sliepen + Copyright (C) 1998-2004 Ivo Timmermans + 2000-2004 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: netutl.c,v 1.12.4.53 2003/08/22 11:18:42 guus Exp $ + $Id$ */ #include "system.h" @@ -193,6 +193,8 @@ int sockaddrcmp(const sockaddr_t *a, const sockaddr_t *b) } void sockaddrcpy(sockaddr_t *a, const sockaddr_t *b) { + cp(); + if(b->sa.sa_family != AF_UNKNOWN) { *a = *b; } else { @@ -203,6 +205,8 @@ void sockaddrcpy(sockaddr_t *a, const sockaddr_t *b) { } void sockaddrfree(sockaddr_t *a) { + cp(); + if(a->sa.sa_family == AF_UNKNOWN) { free(a->unknown.address); free(a->unknown.port); @@ -211,6 +215,8 @@ void sockaddrfree(sockaddr_t *a) { void sockaddrunmap(sockaddr_t *sa) { + cp(); + if(sa->sa.sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&sa->in6.sin6_addr)) { sa->in.sin_addr.s_addr = ((uint32_t *) & sa->in6.sin6_addr)[3]; sa->in.sin_family = AF_INET;