/*
netutl.c -- some supporting network utility code
- Copyright (C) 1998-2003 Ivo Timmermans <ivo@o2w.nl>
- 2000-2003 Guus Sliepen <guus@sliepen.eu.org>
+ Copyright (C) 1998-2005 Ivo Timmermans
+ 2000-2006 Guus Sliepen <guus@tinc-vpn.org>
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
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.17 2003/08/24 20:38:25 guus Exp $
+ $Id$
*/
#include "system.h"
return result;
}
- result = *(sockaddr_t *) ai->ai_addr;
+ memcpy(&result, ai->ai_addr, ai->ai_addrlen);
freeaddrinfo(ai);
return result;
/* Subnet mask handling */
-int maskcmp(const void *va, const void *vb, int masklen, int len)
+int maskcmp(const void *va, const void *vb, int masklen)
{
int i, m, result;
const char *a = va;
masklen %= 8;
if(masklen)
- a[i++] &= (0x100 - (1 << masklen));
+ a[i++] &= (0x100 - (1 << (8 - masklen)));
for(; i < len; i++)
a[i] = 0;
a[i] = b[i];
if(m) {
- a[i] = b[i] & (0x100 - (1 << m));
+ a[i] = b[i] & (0x100 - (1 << (8 - m)));
i++;
}