1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
|
/*
* irc_std.h: header to define things used in all the programs ircii
* comes with
*
* hacked together from various other files by matthew green
*
* Copyright (c) 1992-2002 Matthew R. Green.
* 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. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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.
*
* @(#)$eterna: irc_std.h,v 1.40 2002/09/10 13:04:55 mrg Exp $
*/
#ifndef __irc_std_h
#define __irc_std_h
#undef _
#if defined(__STDC__) || defined(__BORLANDC__)
# define _(a) a
#else
# define _(a) ()
# ifdef const
# undef const
# endif /* cost */
# define const
#endif /* __STDC__ */
/*
* these things help with converting to/from char* and u_char*
*/
#define UP(s) ((u_char *)(s))
#define UPP(s) ((u_char **)(s))
#define CP(s) ((char *)(s))
#define CPP(s) ((char **)(s))
#define my_strlen(s) strlen(CP(s))
#define my_strcmp(d,s) strcmp(CP(d), CP(s))
#define my_strncmp(d,s,n) strncmp(CP(d), CP(s), (n))
#define my_strcat(d,s) strcat(CP(d), CP(s))
#define my_strncat(d,s,n) strncat(CP(d), CP(s), (n))
#define my_strmcat(d,s,n) strmcat(UP(d), UP(s), (n))
#define my_strcpy(d,s) strcpy(CP(d), CP(s))
#define my_strncpy(d,s,n) strncpy(CP(d), CP(s), (n))
#define my_strmcpy(d,s,n) strmcpy(UP(d), UP(s), (n))
#define my_index(s,c) UP(index(CP(s), (c)))
#define my_rindex(s,c) UP(rindex(CP(s), (c)))
#define my_atoi(s) atoi(CP(s))
#define my_atol(s) atol(CP(s))
#define my_getenv(s) UP(getenv(CP(s)))
#if !defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
#define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */
#endif
#ifndef lint
#define IRCII_RCSID(x) static const char rcsid[] __attribute__((__unused__)) = x
#else
#define IRCII_RCSID(x)
#endif
#ifdef _IBMR2
# include <sys/errno.h>
# include <sys/select.h>
#else
# include <errno.h>
#ifndef ERRNO_DECLARED
extern int errno;
#endif
#endif /* _IBMR2 */
#ifndef NBBY
# define NBBY 8 /* number of bits in a byte */
#endif /* NBBY */
#ifndef NFDBITS
# define NFDBITS (sizeof(long) * NBBY) /* bits per mask */
#endif /* NFDBITS */
#ifndef FD_SET
# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
#endif /* FD_SET */
#ifndef FD_CLR
# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
#endif /* FD_CLR */
#ifndef FD_ISSET
# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
#endif /* FD_ISSET */
#ifndef FD_ZERO
# define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
#endif /* FD_ZERO */
#ifndef FD_SETSIZE
# define FD_SETSIZE 32
#endif /* FD_SETSIZE */
typedef RETSIGTYPE sigfunc _((void));
#ifdef USE_SIGACTION
sigfunc *my_signal _((int, sigfunc *, int));
# define MY_SIGNAL(s_n, s_h, m_f) my_signal(s_n, s_h, m_f)
#else
# if USE_SIGSET
# define MY_SIGNAL(s_n, s_h, m_f) sigset(s_n, s_h)
# else
# define MY_SIGNAL(s_n, s_h, m_f) signal(s_n, s_h)
# endif /* USE_SIGSET */
#endif /* USE_SIGACTION */
#if defined(USE_SIGACTION) || defined(USE_SIGSET)
# undef SYSVSIGNALS
#endif /* USE_SIGACTION || USE_SIGSET */
#if defined(__svr4__) || defined(SVR4) || defined(__SVR4)
# if !defined(__svr4__)
# define __svr4__
# endif /* __svr4__ */
# if !defined(SVR4)
# define SVR4
# endif /* SVR4 */
# if !defined(__SVR4)
# define __SVR4
# endif /* __SVR4 */
#endif /* __svr4__ || SVR4 || __SVR4 */
#ifdef _SEQUENT_
# define u_short ushort
# define u_char unchar
# define u_long ulong
# define u_int uint
# define USE_TERMIO
# ifndef POSIX
# define POSIX
# endif /* POSIX */
#endif /* _SEQUENT_ */
#ifndef NeXT
# if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
# include <string.h>
# if defined(STDC_HEADERS)
# include <stdlib.h>
# endif /* HAVE_STDLIB_H */
# if defined(HAVE_MEMORY_H)
# include <memory.h>
# endif /* HAVE_MEMORY_H */
# undef index
# undef rindex
# undef bcopy
# undef bzero
# undef bcmp
# define index strchr
# define rindex strrchr
# ifdef HAVE_MEMMOVE
# define bcopy(s, d, n) memmove((d), (s), (n))
# else
# define bcopy(s, d, n) memcpy ((d), (s), (n))
# endif /* HAVE_MEMMOVE */
# define bcmp(s, t, n) memcmp ((s), (t), (n))
# define bzero(s, n) memset ((s), 0, (n))
# else /* STDC_HEADERS || HAVE_STRING_H */
# include <strings.h>
# endif /* STDC_HEADERS || HAVE_STRING_H */
#endif /* !NeXT */
#ifdef _Windows
# define IS_ABSOLUTE_PATH(file) ((file)[0] == '/' || (file)[0] == '\\' || ((file)[0] && (file)[1] == ':'))
#else
# define IS_ABSOLUTE_PATH(file) ((file)[0] == '/')
#endif
#if !defined(SYS_ERRLIST_DECLARED) && !defined(_Windows)
extern char *sys_errlist[];
extern int sys_nerr;
#endif
#ifdef _Windows
extern char FAR * FAR winsock_errors[];
# define strerror(e) ((e) >= 0 && (e) < sys_nerr ? sys_errlist[e] : ((e) >=WSABASEERR ? winsock_errors[(e) - WSABASEERR] : "(unknown)"))
#else
# ifdef NEED_STRERROR
# undef strerror
# define strerror(e) ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
# endif
#endif
/* we need an unsigned 32 bit integer for dcc, how lame */
#ifdef UNSIGNED_LONG32
typedef unsigned long u_32int;
#else
# ifdef UNSIGNED_INT32
typedef unsigned int u_32int;
# else
typedef unsigned long u_32int;
# endif /* UNSIGNED_INT32 */
#endif /* UNSIGNED_LONG32 */
#if ! HAVE_RFC2553_NETDB
/* RFC 2553 */
#undef EAI_ADDRFAMILY
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
#undef EAI_AGAIN
#define EAI_AGAIN 2 /* temporary failure in name resolution */
#undef EAI_BADFLAGS
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
#undef EAI_FAIL
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
#undef EAI_FAMILY
#define EAI_FAMILY 5 /* ai_family not supported */
#undef EAI_MEMORY
#define EAI_MEMORY 6 /* memory allocation failure */
#undef EAI_NODATA
#define EAI_NODATA 7 /* no address associated with hostname */
#undef EAI_NONAME
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
#undef EAI_SERVICE
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
#undef EAI_SOCKTYPE
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
#undef EAI_SYSTEM
#define EAI_SYSTEM 11 /* system error returned in errno */
/* KAME extensions? */
#undef EAI_BADHINTS
#define EAI_BADHINTS 12
#undef EAI_PROTOCOL
#define EAI_PROTOCOL 13
#undef EAI_MAX
#define EAI_MAX 14
/* RFC 2553 */
#undef NI_MAXHOST
#define NI_MAXHOST 1025
#undef NI_MAXSERV
#define NI_MAXSERV 32
#undef NI_NOFQDN
#define NI_NOFQDN 0x00000001
#undef NI_NUMERICHOST
#define NI_NUMERICHOST 0x00000002
#undef NI_NAMEREQD
#define NI_NAMEREQD 0x00000004
#undef NI_NUMERICSERV
#define NI_NUMERICSERV 0x00000008
#undef NI_DGRAM
#define NI_DGRAM 0x00000010
/* RFC 2553 */
#undef AI_PASSIVE
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
#undef AI_CANONNAME
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
/* KAME extensions ? */
#undef AI_NUMERICHOST
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
#undef AI_MASK
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
/* RFC 2553 */
#undef AI_ALL
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
#undef AI_V4MAPPED_CFG
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
#undef AI_ADDRCONFIG
#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
#undef AI_V4MAPPED
#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
#endif /* ! HAVE_RFC2553_NETDB */
#if ! HAVE_SOCKLEN_T
typedef int socklen_t;
#endif /* HAVE_SOCKLEN_T */
#if ! HAVE_RFC2553_NETDB && ! HAVE_ADDRINFO
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
size_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for hostname */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
int getaddrinfo _((const char *, const char *,
const struct addrinfo *, struct addrinfo **));
int getnameinfo _((const struct sockaddr *, socklen_t, char *,
size_t, char *, size_t, int));
void freeaddrinfo _((struct addrinfo *));
char *gai_strerror _((int));
#endif /* ! HAVE_RFC2553_NETDB && ! HAVE_ADDRINFO */
#ifndef HAVE_SNPRINTF
int snprintf _((char *str, size_t count, const char *fmt, ...));
#endif /* HAVE_SNPRINTF */
#ifndef HAVE_VSNPRINTF
int vsnprintf _((char *str, size_t count, const char *fmt, ...));
#endif /* HAVE_VSNPRINTF */
#ifdef INET6
# define SOCKADDR_STORAGE struct sockaddr_storage
# define SS_FAMILY(ss) (ss)->ss_family
#else
# define SOCKADDR_STORAGE struct sockaddr_in
# define SS_FAMILY(ss) (ss)->sin_family
#endif
#endif /* __irc_std_h */
|