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