File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / lib / addrinfo.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Feb 17 15:09:30 2012 UTC (12 years, 4 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_2_3, v3_1_2p5, rsync3_0_9p0, RSYNC3_1_0, RSYNC3_0_9, HEAD
rsync

    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:  * This code will also work on platforms where struct addrinfo is defined
   41:  * in the system headers but no getaddrinfo() can be located.
   42:  *
   43:  * Copyright (c) 2003-2007, PostgreSQL Global Development Group
   44:  *
   45:  *-------------------------------------------------------------------------
   46:  */
   47: #ifndef ADDRINFO_H
   48: #define ADDRINFO_H
   49: 
   50: 
   51: /* Various macros that ought to be in <netdb.h>, but might not be */
   52: 
   53: #ifndef EAI_FAIL
   54: #define EAI_BADFLAGS	(-1)
   55: #define EAI_NONAME		(-2)
   56: #define EAI_AGAIN		(-3)
   57: #define EAI_FAIL		(-4)
   58: #define EAI_FAMILY		(-6)
   59: #define EAI_SOCKTYPE	(-7)
   60: #define EAI_SERVICE		(-8)
   61: #define EAI_MEMORY		(-10)
   62: #define EAI_SYSTEM		(-11)
   63: #endif   /* !EAI_FAIL */
   64: 
   65: #ifndef AI_PASSIVE
   66: #define AI_PASSIVE		0x0001
   67: #endif
   68: 
   69: #ifndef AI_NUMERICHOST
   70: /*
   71:  * some platforms don't support AI_NUMERICHOST; define as zero if using
   72:  * the system version of getaddrinfo...
   73:  */
   74: #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
   75: #define AI_NUMERICHOST	0
   76: #else
   77: #define AI_NUMERICHOST	0x0004
   78: #endif
   79: #endif
   80: 
   81: #ifndef AI_CANONNAME
   82: #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
   83: #define AI_CANONNAME 0
   84: #else
   85: #define AI_CANONNAME 0x0008
   86: #endif
   87: #endif
   88: 
   89: #ifndef AI_NUMERICSERV
   90: #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
   91: #define AI_NUMERICSERV 0
   92: #else
   93: #define AI_NUMERICSERV 0x0010
   94: #endif
   95: #endif
   96: 
   97: #ifndef NI_NUMERICHOST
   98: #define NI_NUMERICHOST	1
   99: #endif
  100: 
  101: #ifndef NI_NUMERICSERV
  102: #define NI_NUMERICSERV	2
  103: #endif
  104: 
  105: #ifndef NI_NOFQDN
  106: #define NI_NOFQDN	4
  107: #endif
  108: 
  109: #ifndef NI_NAMEREQD
  110: #define NI_NAMEREQD 	8
  111: #endif
  112: 
  113: #ifndef NI_DGRAM
  114: #define NI_DGRAM	16
  115: #endif
  116: 
  117: 
  118: #ifndef NI_MAXHOST
  119: #define NI_MAXHOST	1025
  120: #endif
  121: 
  122: #ifndef NI_MAXSERV
  123: #define NI_MAXSERV	32
  124: #endif
  125: 
  126: #ifndef HAVE_STRUCT_ADDRINFO
  127: struct addrinfo
  128: {
  129: 	int			ai_flags;
  130: 	int			ai_family;
  131: 	int			ai_socktype;
  132: 	int			ai_protocol;
  133: 	size_t		ai_addrlen;
  134: 	struct sockaddr *ai_addr;
  135: 	char	   *ai_canonname;
  136: 	struct addrinfo *ai_next;
  137: };
  138: #endif   /* !HAVE_STRUCT_ADDRINFO */
  139: 
  140: #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
  141: struct sockaddr_storage {
  142: 	unsigned short ss_family;
  143: 	unsigned long ss_align;
  144: 	char ss_padding[128 - sizeof (unsigned long)];
  145: };
  146: #endif	/* !HAVE_STRUCT_SOCKADDR_STORAGE */
  147: 
  148: #ifndef HAVE_GETADDRINFO
  149: 
  150: /* Rename private copies per comments above */
  151: #ifdef getaddrinfo
  152: #undef getaddrinfo
  153: #endif
  154: #define getaddrinfo pg_getaddrinfo
  155: 
  156: #ifdef freeaddrinfo
  157: #undef freeaddrinfo
  158: #endif
  159: #define freeaddrinfo pg_freeaddrinfo
  160: 
  161: #ifdef gai_strerror
  162: #undef gai_strerror
  163: #endif
  164: #define gai_strerror pg_gai_strerror
  165: 
  166: #ifdef getnameinfo
  167: #undef getnameinfo
  168: #endif
  169: #define getnameinfo pg_getnameinfo
  170: 
  171: extern int getaddrinfo(const char *node, const char *service,
  172: 			const struct addrinfo * hints, struct addrinfo ** res);
  173: extern void freeaddrinfo(struct addrinfo * res);
  174: extern const char *gai_strerror(int errcode);
  175: extern int getnameinfo(const struct sockaddr * sa, socklen_t salen,
  176: 			char *node, size_t nodelen,
  177: 			char *service, size_t servicelen, int flags);
  178: #endif   /* !HAVE_GETADDRINFO */
  179: 
  180: #endif   /* ADDRINFO_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>