1 /* 2 PostgreSQL Database Management System 3 (formerly known as Postgres, then as Postgres95) 4 5 Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group 6 7 Portions Copyright (c) 1994, The Regents of the University of California 8 9 Permission to use, copy, modify, and distribute this software and its 10 documentation for any purpose, without fee, and without a written agreement 11 is hereby granted, provided that the above copyright notice and this paragraph 12 and the following two paragraphs appear in all copies. 13 14 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR 15 DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING 16 LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, 17 EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 18 SUCH DAMAGE. 19 20 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 21 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 22 AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 23 ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS 24 TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 25 26 */ 27 28 /*------------------------------------------------------------------------- 29 * 30 * getaddrinfo.h 31 * Support getaddrinfo() on platforms that don't have it. 32 * 33 * Note: we use our own routines on platforms that don't HAVE_STRUCT_ADDRINFO, 34 * whether or not the library routine getaddrinfo() can be found. This 35 * policy is needed because on some platforms a manually installed libbind.a 36 * may provide getaddrinfo(), yet the system headers may not provide the 37 * struct definitions needed to call it. To avoid conflict with the libbind 38 * definition in such cases, we rename our routines to pg_xxx() via macros. 39 * 40 41 in lib/replace we use rep_xxx() 42 43 * This code will also work on platforms where struct addrinfo is defined 44 * in the system headers but no getaddrinfo() can be located. 45 * 46 * Copyright (c) 2003-2007, PostgreSQL Global Development Group 47 * 48 *------------------------------------------------------------------------- 49 */ 50 #ifndef GETADDRINFO_H 51 #define GETADDRINFO_H 52 53 #ifndef HAVE_GETADDRINFO 54 55 /* Rename private copies per comments above */ 56 #ifdef getaddrinfo 57 #undef getaddrinfo 58 #endif 59 #define getaddrinfo rep_getaddrinfo 60 #define HAVE_GETADDRINFO 61 62 #ifdef freeaddrinfo 63 #undef freeaddrinfo 64 #endif 65 #define freeaddrinfo rep_freeaddrinfo 66 #define HAVE_FREEADDRINFO 67 68 #ifdef gai_strerror 69 #undef gai_strerror 70 #endif 71 #define gai_strerror rep_gai_strerror 72 #define HAVE_GAI_STRERROR 73 74 #ifdef getnameinfo 75 #undef getnameinfo 76 #endif 77 #define getnameinfo rep_getnameinfo 78 #ifndef HAVE_GETNAMEINFO 79 #define HAVE_GETNAMEINFO 80 #endif 81 82 extern int rep_getaddrinfo(const char *node, const char *service, 83 const struct addrinfo * hints, struct addrinfo ** res); 84 extern void rep_freeaddrinfo(struct addrinfo * res); 85 extern const char *rep_gai_strerror(int errcode); 86 extern int rep_getnameinfo(const struct sockaddr * sa, socklen_t salen, 87 char *node, size_t nodelen, 88 char *service, size_t servicelen, int flags); 89 #endif /* HAVE_GETADDRINFO */ 90 91 #endif /* GETADDRINFO_H */ 92