diff --git a/headers/posix/arpa/inet.h b/headers/posix/arpa/inet.h index f9844d34d2..000a1de93d 100644 --- a/headers/posix/arpa/inet.h +++ b/headers/posix/arpa/inet.h @@ -1,106 +1,44 @@ /* - * Copyright 2006, Haiku, Inc. All Rights Reserved. + * Copyright 2009, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ - -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - - * Portions Copyright (c) 1993 by Digital Equipment Corporation. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies, and that - * the name of Digital Equipment Corporation not be used in advertising or - * publicity pertaining to distribution of the document or software without - * specific, written prior permission. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT - * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ #ifndef _INET_H_ #define _INET_H_ #include +#include #include #include -#include -#define inet_addr __inet_addr -#define inet_aton __inet_aton -#define inet_lnaof __inet_lnaof -#define inet_makeaddr __inet_makeaddr -#define inet_neta __inet_neta -#define inet_netof __inet_netof -#define inet_network __inet_network -#define inet_net_ntop __inet_net_ntop -#define inet_net_pton __inet_net_pton -#define inet_cidr_ntop __inet_cidr_ntop -#define inet_cidr_pton __inet_cidr_pton -#define inet_ntoa __inet_ntoa -#define inet_pton __inet_pton -#define inet_ntop __inet_ntop -#define inet_nsap_addr __inet_nsap_addr -#define inet_nsap_ntoa __inet_nsap_ntoa - #ifdef __cplusplus extern "C" { #endif -in_addr_t inet_addr(const char *); -int inet_aton(const char *, struct in_addr *); -unsigned long inet_lnaof(struct in_addr); -struct in_addr inet_makeaddr(u_long , u_long); -char *inet_neta(u_long, char *, size_t); -unsigned long inet_netof(struct in_addr); -unsigned long inet_network(const char *); -char *inet_net_ntop(int, const void *, int, char *, size_t); -int inet_net_pton(int, const char *, void *, size_t); -char *inet_cidr_ntop(int, const void *, int, char *, size_t); -int inet_cidr_pton(int, const char *, void *, int *); -char *inet_ntoa(struct in_addr); -int inet_pton(int, const char *, void *); +in_addr_t inet_addr(const char* addressString); +int inet_aton(const char* addressString, struct in_addr* address); +char* inet_cidr_ntop(int family, const void* source, int bits, + char* dest, size_t destSize); +int inet_cidr_pton(int family, const char* sourceString, void* dest, + int* _bits); +u_long inet_lnaof(struct in_addr address); +struct in_addr inet_makeaddr(u_long net, u_long host); +char* inet_net_ntop(int family, const void* source, int bits, + char* dest, size_t destSize); +int inet_net_pton(int family, const char* sourceString, void* dest, + size_t destSize); +char* inet_neta(u_long source, char* dest, size_t destSize); +u_long inet_netof(struct in_addr address); +u_long inet_network(const char* addressString); +char* inet_ntoa(struct in_addr address); const char* inet_ntop(int family, const void* source, char* dest, - socklen_t size); -u_int inet_nsap_addr(const char *, u_char *, int); -char *inet_nsap_ntoa(int, const u_char *, char *); + size_t destSize); +int inet_pton(int family, const char* sourceString, void* dest); +u_int inet_nsap_addr(const char* sourceString, u_char* dest, + int destSize); +char* inet_nsap_ntoa(int sourceLength, const u_char* source, + char* dest); #ifdef __cplusplus } diff --git a/src/kits/network/libbind/inet/inet_addr.c b/src/kits/network/libbind/inet/inet_addr.c index 8c7f6d98cf..73a4c5c9b8 100644 --- a/src/kits/network/libbind/inet/inet_addr.c +++ b/src/kits/network/libbind/inet/inet_addr.c @@ -205,4 +205,7 @@ inet_aton(const char *cp, struct in_addr *addr) { return (1); } -/*! \file */ +#undef inet_addr +#pragma weak inet_addr = __inet_addr +#undef inet_aton +#pragma weak inet_aton = __inet_aton diff --git a/src/kits/network/libbind/inet/inet_cidr_ntop.c b/src/kits/network/libbind/inet/inet_cidr_ntop.c index bf960a8acc..2eb2ad3eec 100644 --- a/src/kits/network/libbind/inet/inet_cidr_ntop.c +++ b/src/kits/network/libbind/inet/inet_cidr_ntop.c @@ -148,7 +148,7 @@ inet_cidr_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size) { errno = EMSGSIZE; return (NULL); } - + static char * inet_cidr_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) { /* @@ -241,7 +241,7 @@ inet_cidr_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) { } /* Was it a trailing run of 0x00's? */ - if (best.base != -1 && (best.base + best.len) == + if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) *tp++ = ':'; *tp = '\0'; @@ -260,4 +260,5 @@ inet_cidr_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) { return (dst); } -/*! \file */ +#undef inet_cidr_ntop +#pragma weak inet_cidr_ntop = __inet_cidr_ntop diff --git a/src/kits/network/libbind/inet/inet_cidr_pton.c b/src/kits/network/libbind/inet/inet_cidr_pton.c index 07652af463..ed17740324 100644 --- a/src/kits/network/libbind/inet/inet_cidr_pton.c +++ b/src/kits/network/libbind/inet/inet_cidr_pton.c @@ -255,7 +255,7 @@ static int getbits(const char *src, int ipv6) { int bits = 0; char *cp, ch; - + if (*src == '\0') /*%< syntax */ return (-2); do { @@ -274,4 +274,5 @@ getbits(const char *src, int ipv6) { return (bits); } -/*! \file */ +#undef inet_cidr_pton +#pragma weak inet_cidr_pton = __inet_cidr_pton diff --git a/src/kits/network/libbind/inet/inet_lnaof.c b/src/kits/network/libbind/inet/inet_lnaof.c index 70ac409512..5166ea9744 100644 --- a/src/kits/network/libbind/inet/inet_lnaof.c +++ b/src/kits/network/libbind/inet/inet_lnaof.c @@ -62,4 +62,5 @@ inet_lnaof(in) return ((i)&IN_CLASSC_HOST); } -/*! \file */ +#undef inet_lnaof +#pragma weak inet_lnaof = __inet_lnaof diff --git a/src/kits/network/libbind/inet/inet_makeaddr.c b/src/kits/network/libbind/inet/inet_makeaddr.c index c56cb3eaeb..4cdce72b8d 100644 --- a/src/kits/network/libbind/inet/inet_makeaddr.c +++ b/src/kits/network/libbind/inet/inet_makeaddr.c @@ -65,4 +65,5 @@ inet_makeaddr(net, host) return (a); } -/*! \file */ +#undef inet_makeaddr +#pragma weak inet_makeaddr = __inet_makeaddr diff --git a/src/kits/network/libbind/inet/inet_net_ntop.c b/src/kits/network/libbind/inet/inet_net_ntop.c index fb28e3cbe5..98e246abb1 100644 --- a/src/kits/network/libbind/inet/inet_net_ntop.c +++ b/src/kits/network/libbind/inet/inet_net_ntop.c @@ -191,7 +191,7 @@ inet_net_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) { *cp++ = ':'; *cp = '\0'; } else { - /* Copy src to private buffer. Zero host part. */ + /* Copy src to private buffer. Zero host part. */ p = (bits + 7) / 8; memcpy(inbuf, src, p); memset(inbuf + p, 0, 16 - p); @@ -207,7 +207,7 @@ inet_net_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) { words = (bits + 15) / 16; if (words == 1) words = 2; - + /* Find the longest substring of zero's */ zero_s = zero_l = tmp_zero_s = tmp_zero_l = 0; for (i = 0; i < (words * 2); i += 2) { @@ -268,7 +268,7 @@ inet_net_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) { if (strlen(outbuf) + 1 > size) goto emsgsize; strcpy(dst, outbuf); - + return (dst); emsgsize: @@ -276,4 +276,5 @@ emsgsize: return (NULL); } -/*! \file */ +#undef inet_net_ntop +#pragma weak inet_net_ntop = __inet_net_ntop diff --git a/src/kits/network/libbind/inet/inet_net_pton.c b/src/kits/network/libbind/inet/inet_net_pton.c index 8d8bfb1f64..eeb3ec8e00 100644 --- a/src/kits/network/libbind/inet/inet_net_pton.c +++ b/src/kits/network/libbind/inet/inet_net_pton.c @@ -404,4 +404,5 @@ inet_net_pton(int af, const char *src, void *dst, size_t size) { } } -/*! \file */ +#undef inet_net_pton +#pragma weak inet_net_pton = __inet_net_pton diff --git a/src/kits/network/libbind/inet/inet_neta.c b/src/kits/network/libbind/inet/inet_neta.c index 63a6c201a4..1dc4a7058d 100644 --- a/src/kits/network/libbind/inet/inet_neta.c +++ b/src/kits/network/libbind/inet/inet_neta.c @@ -86,4 +86,5 @@ inet_neta(src, dst, size) return (NULL); } -/*! \file */ +#undef inet_neta +#pragma weak inet_neta = __inet_neta diff --git a/src/kits/network/libbind/inet/inet_netof.c b/src/kits/network/libbind/inet/inet_netof.c index c228e3d818..172d483bea 100644 --- a/src/kits/network/libbind/inet/inet_netof.c +++ b/src/kits/network/libbind/inet/inet_netof.c @@ -61,4 +61,5 @@ inet_netof(in) return (((i)&IN_CLASSC_NET) >> IN_CLASSC_NSHIFT); } -/*! \file */ +#undef inet_netof +#pragma weak inet_netof = __inet_netof diff --git a/src/kits/network/libbind/inet/inet_network.c b/src/kits/network/libbind/inet/inet_network.c index 47976cff68..8d076d4c30 100644 --- a/src/kits/network/libbind/inet/inet_network.c +++ b/src/kits/network/libbind/inet/inet_network.c @@ -103,4 +103,5 @@ again: return (val); } -/*! \file */ +#undef inet_network +#pragma weak inet_network = __inet_network diff --git a/src/kits/network/libbind/inet/inet_ntoa.c b/src/kits/network/libbind/inet/inet_ntoa.c index 983121e89d..d191028157 100644 --- a/src/kits/network/libbind/inet/inet_ntoa.c +++ b/src/kits/network/libbind/inet/inet_ntoa.c @@ -61,4 +61,5 @@ inet_ntoa(struct in_addr in) { return (ret); } -/*! \file */ +#undef inet_ntoa +#pragma weak inet_ntoa = __inet_ntoa diff --git a/src/kits/network/libbind/inet/inet_ntop.c b/src/kits/network/libbind/inet/inet_ntop.c index dc6b1a22e1..dd6436f3bb 100644 --- a/src/kits/network/libbind/inet/inet_ntop.c +++ b/src/kits/network/libbind/inet/inet_ntop.c @@ -62,7 +62,7 @@ inet_ntop(af, src, dst, size) int af; const void *src; char *dst; - socklen_t size; + size_t size; { switch (af) { case AF_INET: @@ -204,4 +204,5 @@ inet_ntop6(src, dst, size) return (dst); } -/*! \file */ +#undef inet_ntop +#pragma weak inet_ntop = __inet_ntop diff --git a/src/kits/network/libbind/inet/inet_pton.c b/src/kits/network/libbind/inet/inet_pton.c index 2c516c798a..e8bf581c32 100644 --- a/src/kits/network/libbind/inet/inet_pton.c +++ b/src/kits/network/libbind/inet/inet_pton.c @@ -220,4 +220,5 @@ inet_pton6(src, dst) return (1); } -/*! \file */ +#undef inet_pton +#pragma weak inet_pton = __inet_pton diff --git a/src/kits/network/libbind/inet/nsap_addr.c b/src/kits/network/libbind/inet/nsap_addr.c index b6432e1e49..0fe1f2f104 100644 --- a/src/kits/network/libbind/inet/nsap_addr.c +++ b/src/kits/network/libbind/inet/nsap_addr.c @@ -108,4 +108,7 @@ inet_nsap_ntoa(int binlen, const u_char *binary, char *ascii) { return (start); } -/*! \file */ +#undef inet_nsap_addr +#pragma weak inet_nsap_addr = __inet_nsap_addr +#undef inet_nsap_ntoa +#pragma weak inet_nsap_ntoa = __inet_nsap_ntoa diff --git a/src/kits/network/libbind/port_before.h b/src/kits/network/libbind/port_before.h index ad2eb90dd2..89b775ecfc 100644 --- a/src/kits/network/libbind/port_before.h +++ b/src/kits/network/libbind/port_before.h @@ -28,6 +28,24 @@ #ifdef __HAIKU__ # include # define ETOOMANYREFS EBADF + +// inet_*() are just weak symbols +# define inet_addr __inet_addr +# define inet_aton __inet_aton +# define inet_lnaof __inet_lnaof +# define inet_makeaddr __inet_makeaddr +# define inet_neta __inet_neta +# define inet_netof __inet_netof +# define inet_network __inet_network +# define inet_net_ntop __inet_net_ntop +# define inet_net_pton __inet_net_pton +# define inet_cidr_ntop __inet_cidr_ntop +# define inet_cidr_pton __inet_cidr_pton +# define inet_ntoa __inet_ntoa +# define inet_pton __inet_pton +# define inet_ntop __inet_ntop +# define inet_nsap_addr __inet_nsap_addr +# define inet_nsap_ntoa __inet_nsap_ntoa #endif struct group; /* silence warning */