1 /* 2 * Copyright (c) 2011 Tim van der Molen <tim@kariliq.nl> 3 * 4 * Permission to use, copy, modify, and distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef COMPAT_H 18 #define COMPAT_H 19 20 #include "attribute.h" 21 22 #ifndef HAVE_ASPRINTF 23 int asprintf(char **, const char *, ...) NONNULL() 24 PRINTFLIKE(2, 3); 25 int vasprintf(char **, const char *, va_list) NONNULL() 26 PRINTFLIKE(2, 0); 27 #endif 28 29 #ifndef HAVE_ERR 30 void err(int, const char *, ...) NORETURN PRINTFLIKE(2, 3); 31 void errx(int, const char *, ...) NORETURN PRINTFLIKE(2, 3); 32 void verr(int, const char *, va_list) NORETURN PRINTFLIKE(2, 0); 33 void verrx(int, const char *, va_list) NORETURN PRINTFLIKE(2, 0); 34 void vwarn(const char *, va_list) PRINTFLIKE(1, 0); 35 void vwarnx(const char *, va_list) PRINTFLIKE(1, 0); 36 void warn(const char *, ...) PRINTFLIKE(1, 2); 37 void warnx(const char *, ...) PRINTFLIKE(1, 2); 38 #endif 39 40 #ifndef HAVE_OPTRESET 41 #define getopt xgetopt 42 #define optarg xoptarg 43 #define opterr xopterr 44 #define optind xoptind 45 #define optopt xoptopt 46 #define optreset xoptreset 47 48 extern int xopterr, xoptind, xoptopt, xoptreset; 49 extern char *xoptarg; 50 51 int xgetopt(int, char * const *, const char *); 52 #endif 53 54 #ifndef HAVE_REALLOCARRAY 55 void *reallocarray(void *, size_t, size_t); 56 #endif 57 58 #ifndef HAVE_STRCASESTR 59 char *strcasestr(const char *, const char *); 60 #endif 61 62 #ifndef HAVE_STRLCAT 63 size_t strlcat(char *, const char *, size_t); 64 #endif 65 66 #ifndef HAVE_STRLCPY 67 size_t strlcpy(char *, const char *, size_t); 68 #endif 69 70 #ifndef HAVE_STRSEP 71 char *strsep(char **, const char *); 72 #endif 73 74 #ifndef HAVE_STRTONUM 75 long long int strtonum(const char *, long long, long long, const char **); 76 #endif 77 78 #endif 79