1*dc4f0af1Szrj /* 2*dc4f0af1Szrj * Copyright (c) 1984 through 2008, William LeFebvre 3*dc4f0af1Szrj * All rights reserved. 4*dc4f0af1Szrj * 5*dc4f0af1Szrj * Redistribution and use in source and binary forms, with or without 6*dc4f0af1Szrj * modification, are permitted provided that the following conditions are met: 7*dc4f0af1Szrj * 8*dc4f0af1Szrj * * Redistributions of source code must retain the above copyright 9*dc4f0af1Szrj * notice, this list of conditions and the following disclaimer. 10*dc4f0af1Szrj * 11*dc4f0af1Szrj * * Redistributions in binary form must reproduce the above 12*dc4f0af1Szrj * copyright notice, this list of conditions and the following disclaimer 13*dc4f0af1Szrj * in the documentation and/or other materials provided with the 14*dc4f0af1Szrj * distribution. 15*dc4f0af1Szrj * 16*dc4f0af1Szrj * * Neither the name of William LeFebvre nor the names of other 17*dc4f0af1Szrj * contributors may be used to endorse or promote products derived from 18*dc4f0af1Szrj * this software without specific prior written permission. 19*dc4f0af1Szrj * 20*dc4f0af1Szrj * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21*dc4f0af1Szrj * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*dc4f0af1Szrj * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23*dc4f0af1Szrj * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24*dc4f0af1Szrj * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25*dc4f0af1Szrj * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26*dc4f0af1Szrj * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27*dc4f0af1Szrj * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28*dc4f0af1Szrj * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29*dc4f0af1Szrj * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30*dc4f0af1Szrj * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*dc4f0af1Szrj */ 32*dc4f0af1Szrj 33*dc4f0af1Szrj #include "config.h" 34*dc4f0af1Szrj 35*dc4f0af1Szrj #include <sys/types.h> 36*dc4f0af1Szrj #include <sys/param.h> 37*dc4f0af1Szrj #include <stdio.h> 38*dc4f0af1Szrj 39*dc4f0af1Szrj #ifdef HAVE_LIMITS_H 40*dc4f0af1Szrj #include <limits.h> 41*dc4f0af1Szrj #endif 42*dc4f0af1Szrj 43*dc4f0af1Szrj #if TIME_WITH_SYS_TIME 44*dc4f0af1Szrj # include <sys/time.h> 45*dc4f0af1Szrj # include <time.h> 46*dc4f0af1Szrj #else 47*dc4f0af1Szrj # if HAVE_SYS_TIME_H 48*dc4f0af1Szrj # include <sys/time.h> 49*dc4f0af1Szrj # else 50*dc4f0af1Szrj # include <time.h> 51*dc4f0af1Szrj # endif 52*dc4f0af1Szrj #endif 53*dc4f0af1Szrj 54*dc4f0af1Szrj #if STDC_HEADERS 55*dc4f0af1Szrj #include <string.h> 56*dc4f0af1Szrj #include <stdlib.h> 57*dc4f0af1Szrj #define setbuffer(f, b, s) setvbuf((f), (b), (b) ? _IOFBF : _IONBF, (s)) 58*dc4f0af1Szrj #define memzero(a, b) memset((a), 0, (b)) 59*dc4f0af1Szrj #else /* !STDC_HEADERS */ 60*dc4f0af1Szrj #ifndef HAVE_STRCHR 61*dc4f0af1Szrj #define strchr(a, b) index((a), (b)) 62*dc4f0af1Szrj #define strrchr(a, b) rindex((a), (b)) 63*dc4f0af1Szrj #endif /* HAVE_STRCHR */ 64*dc4f0af1Szrj #ifdef HAVE_MEMCPY 65*dc4f0af1Szrj #define memzero(a, b) memset((a), 0, (b)) 66*dc4f0af1Szrj #else 67*dc4f0af1Szrj #define memcpy(a, b, c) bcopy((b), (a), (c)) 68*dc4f0af1Szrj #define memzero(a, b) bzero((a), (b)) 69*dc4f0af1Szrj #define memcmp(a, b, c) bcmp((a), (b), (c)) 70*dc4f0af1Szrj #endif /* HAVE_MEMCPY */ 71*dc4f0af1Szrj #ifdef HAVE_STRINGS_H 72*dc4f0af1Szrj #include <strings.h> 73*dc4f0af1Szrj #else 74*dc4f0af1Szrj #ifdef HAVE_STRING_H 75*dc4f0af1Szrj #include <string.h> 76*dc4f0af1Szrj #endif 77*dc4f0af1Szrj #endif 78*dc4f0af1Szrj char *getenv(); 79*dc4f0af1Szrj caddr_t malloc(); 80*dc4f0af1Szrj #endif /* STDC_HEADERS */ 81*dc4f0af1Szrj 82*dc4f0af1Szrj /* If snprintf or vsnprintf aren't available, we substitute our own. 83*dc4f0af1Szrj But we have to include stdarg in order to be able to define them. 84*dc4f0af1Szrj */ 85*dc4f0af1Szrj #ifdef HAVE_STDARG_H 86*dc4f0af1Szrj #include <stdarg.h> 87*dc4f0af1Szrj #endif 88*dc4f0af1Szrj 89*dc4f0af1Szrj #if !HAVE_PID_T 90*dc4f0af1Szrj typedef long pid_t; 91*dc4f0af1Szrj #endif 92*dc4f0af1Szrj #if !HAVE_TIME_T 93*dc4f0af1Szrj typedef long time_t; 94*dc4f0af1Szrj #endif 95*dc4f0af1Szrj #if !HAVE_UID_T 96*dc4f0af1Szrj typedef long uid_t; 97*dc4f0af1Szrj #endif 98*dc4f0af1Szrj 99*dc4f0af1Szrj #ifndef INT_MAX 100*dc4f0af1Szrj #define INT_MAX (0x7fffffff) 101*dc4f0af1Szrj #endif 102*dc4f0af1Szrj 103*dc4f0af1Szrj #ifndef UINT_MAX 104*dc4f0af1Szrj #define UINT_MAX (0xffffffffU) 105*dc4f0af1Szrj #endif 106*dc4f0af1Szrj 107*dc4f0af1Szrj /* we must have both sighold and sigrelse to use them */ 108*dc4f0af1Szrj #if defined(HAVE_SIGHOLD) && !defined(HAVE_SIGRELSE) 109*dc4f0af1Szrj #undef HAVE_SIGHOLD 110*dc4f0af1Szrj #endif 111*dc4f0af1Szrj 112*dc4f0af1Szrj #ifdef HAVE_UNISTD_H 113*dc4f0af1Szrj #include <unistd.h> 114*dc4f0af1Szrj #endif 115*dc4f0af1Szrj 116*dc4f0af1Szrj #ifdef HAVE_SYSEXITS_H 117*dc4f0af1Szrj #include <sysexits.h> 118*dc4f0af1Szrj #else 119*dc4f0af1Szrj #define EX_OK 0 /* successful termination */ 120*dc4f0af1Szrj #define EX_USAGE 64 /* command line usage error */ 121*dc4f0af1Szrj #define EX_DATAERR 65 /* data format error */ 122*dc4f0af1Szrj #define EX_NOINPUT 66 /* cannot open input */ 123*dc4f0af1Szrj #define EX_NOUSER 67 /* addressee unknown */ 124*dc4f0af1Szrj #define EX_NOHOST 68 /* host name unknown */ 125*dc4f0af1Szrj #define EX_UNAVAILABLE 69 /* service unavailable */ 126*dc4f0af1Szrj #define EX_SOFTWARE 70 /* internal software error */ 127*dc4f0af1Szrj #define EX_OSERR 71 /* system error (e.g., can't fork) */ 128*dc4f0af1Szrj #define EX_OSFILE 72 /* critical OS file missing */ 129*dc4f0af1Szrj #define EX_CANTCREAT 73 /* can't create (user) output file */ 130*dc4f0af1Szrj #define EX_IOERR 74 /* input/output error */ 131*dc4f0af1Szrj #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ 132*dc4f0af1Szrj #define EX_PROTOCOL 76 /* remote error in protocol */ 133*dc4f0af1Szrj #define EX_NOPERM 77 /* permission denied */ 134*dc4f0af1Szrj #define EX_CONFIG 78 /* configuration error */ 135*dc4f0af1Szrj #endif 136