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