r18129: moved the system includes into libreplace - this gives much more
[jelmer/samba4-debian.git] / source / lib / replace / replace.h
1 /* 
2    Unix SMB/CIFS implementation.
3
4    macros to go along with the lib/replace/ portability layer code
5
6    Copyright (C) Andrew Tridgell 2005
7    Copyright (C) Jelmer Vernooij 2006
8
9      ** NOTE! The following LGPL license applies to the replace
10      ** library. This does NOT imply that all of Samba is released
11      ** under the LGPL
12    
13    This library is free software; you can redistribute it and/or
14    modify it under the terms of the GNU Lesser General Public
15    License as published by the Free Software Foundation; either
16    version 2 of the License, or (at your option) any later version.
17
18    This library is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    Lesser General Public License for more details.
22
23    You should have received a copy of the GNU Lesser General Public
24    License along with this library; if not, write to the Free Software
25    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26 */
27
28 #ifndef _replace_h
29 #define _replace_h
30
31 #include "config.h"
32
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <stdarg.h>
36 #include <errno.h>
37
38 #if defined(_MSC_VER) || defined(__MINGW32__)
39 #include "lib/replace/win32/replace.h"
40 #endif
41
42 #ifdef __COMPAR_FN_T
43 #define QSORT_CAST (__compar_fn_t)
44 #endif
45
46 #ifndef QSORT_CAST
47 #define QSORT_CAST (int (*)(const void *, const void *))
48 #endif
49
50 #ifdef HAVE_STDINT_H
51 #include <stdint.h>
52 #elif HAVE_INTTYPES_H
53 #include <inttypes.h>
54 #endif
55
56 #ifdef HAVE_STRING_H
57 #include <string.h>
58 #endif
59
60 #ifdef HAVE_STRINGS_H
61 #include <strings.h>
62 #endif
63
64
65 #ifndef HAVE_STRERROR
66 extern char *sys_errlist[];
67 #define strerror(i) sys_errlist[i]
68 #endif
69
70 #ifndef HAVE_ERRNO_DECL
71 extern int errno;
72 #endif
73
74 #ifndef HAVE_STRDUP
75 #define strdup rep_strdup
76 char *rep_strdup(const char *s);
77 #endif
78
79 #ifndef HAVE_MEMMOVE
80 #define memmove rep_memmove
81 void *rep_memmove(void *dest,const void *src,int size);
82 #endif
83
84 #if !defined(HAVE_MKTIME) || !defined(HAVE_TIMEGM)
85 #include "system/time.h"
86 #endif
87
88 #ifndef HAVE_MKTIME
89 #define mktime rep_mktime
90 time_t rep_mktime(struct tm *t);
91 #endif
92
93 #ifndef HAVE_TIMEGM
94 struct tm;
95 #define timegm rep_timegm
96 time_t rep_timegm(struct tm *tm);
97 #endif
98
99 #ifndef HAVE_STRLCPY
100 #define strlcpy rep_strlcpy
101 size_t rep_strlcpy(char *d, const char *s, size_t bufsize);
102 #endif
103
104 #ifndef HAVE_STRLCAT
105 #define strlcat rep_strlcat
106 size_t rep_strlcat(char *d, const char *s, size_t bufsize);
107 #endif
108
109 #ifndef HAVE_STRNDUP
110 #define strndup rep_strndup
111 char *rep_strndup(const char *s, size_t n);
112 #endif
113
114 #ifndef HAVE_STRNLEN
115 #define strnlen rep_strnlen
116 size_t rep_strnlen(const char *s, size_t n);
117 #endif
118
119 #ifndef HAVE_SETENV
120 #define setenv rep_setenv
121 int rep_setenv(const char *name, const char *value, int overwrite); 
122 #endif
123
124 #ifndef HAVE_RENAME
125 #define rename rep_rename
126 int rep_rename(const char *zfrom, const char *zto);
127 #endif
128
129 #ifndef HAVE_STRCASESTR
130 #define strcasestr rep_strcasestr
131 char *rep_strcasestr(const char *haystack, const char *needle);
132 #endif
133
134 #ifndef HAVE_STRTOK_R
135 #define strtok_r rep_strtok_r 
136 char *rep_strtok_r(char *s, const char *delim, char **save_ptr);
137 #endif
138
139 #ifndef HAVE_STRTOLL
140 #define strtoll rep_strtoll
141 long long int rep_strtoll(const char *str, char **endptr, int base);
142 #endif
143
144 #ifndef HAVE_STRTOULL
145 #define strtoull rep_strtoull
146 unsigned long long int rep_strtoull(const char *str, char **endptr, int base);
147 #endif
148
149 #ifndef HAVE_FTRUNCATE
150 #define ftruncate rep_ftruncate
151 int rep_ftruncate(int f,long l);
152 #endif
153
154 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
155 #define bzero(a,b) memset((a),'\0',(b))
156 #endif
157
158
159 #ifndef PRINTF_ATTRIBUTE
160 #if __GNUC__ >= 3
161 /** Use gcc attribute to check printf fns.  a1 is the 1-based index of
162  * the parameter containing the format, and a2 the index of the first
163  * argument. Note that some gcc 2.x versions don't handle this
164  * properly **/
165 #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
166 #else
167 #define PRINTF_ATTRIBUTE(a1, a2)
168 #endif
169 #endif
170
171 #ifndef HAVE_VASPRINTF
172 #define vasprintf rep_vasprintf
173 int rep_vasprintf(char **ptr, const char *format, va_list ap);
174 #endif
175
176 #ifndef HAVE_SNPRINTF
177 #define snprintf rep_snprintf
178 int rep_snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
179 #endif
180
181 #ifndef HAVE_VSNPRINTF
182 #define vsnprintf rep_vsnprintf
183 int rep_vsnprintf(char *,size_t ,const char *, va_list ap);
184 #endif
185
186 #ifndef HAVE_ASPRINTF
187 #define asprintf rep_asprintf
188 int rep_asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
189 #endif
190
191
192 /* we used to use these fns, but now we have good replacements
193    for snprintf and vsnprintf */
194 #define slprintf snprintf
195
196
197 #ifndef HAVE_VA_COPY
198 #ifdef HAVE___VA_COPY
199 #define va_copy(dest, src) __va_copy(dest, src)
200 #else
201 #define va_copy(dest, src) (dest) = (src)
202 #endif
203 #endif
204
205 #ifndef HAVE_VOLATILE
206 #define volatile
207 #endif
208
209 #ifndef HAVE_COMPARISON_FN_T
210 typedef int (*comparison_fn_t)(const void *, const void *);
211 #endif
212
213 /* Load header file for dynamic linking stuff */
214 #ifdef HAVE_DLFCN_H
215 #include <dlfcn.h>
216 #endif
217
218 #ifndef RTLD_LAZY
219 #define RTLD_LAZY 0
220 #endif
221
222 #ifndef HAVE_SECURE_MKSTEMP
223 #define mkstemp(path) rep_mkstemp(path)
224 int rep_mkstemp(char *temp);
225 #endif
226
227 #ifndef HAVE_MKDTEMP
228 #define mkdtemp rep_mkdtemp
229 char *rep_mkdtemp(char *template);
230 #endif
231
232 #ifdef HAVE_LIMITS_H
233 #include <limits.h>
234 #endif
235
236 /* The extra casts work around common compiler bugs.  */
237 #define _TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
238 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
239    It is necessary at least when t == time_t.  */
240 #define _TYPE_MINIMUM(t) ((t) (_TYPE_SIGNED (t) \
241                               ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
242 #define _TYPE_MAXIMUM(t) ((t) (~ (t) 0 - _TYPE_MINIMUM (t)))
243
244 #ifndef HOST_NAME_MAX
245 #define HOST_NAME_MAX 64
246 #endif
247
248 #ifndef UINT16_MAX
249 #define UINT16_MAX 65535
250 #endif
251
252 #ifndef UINT32_MAX
253 #define UINT32_MAX (4294967295U)
254 #endif
255
256 #ifndef UINT64_MAX
257 #define UINT64_MAX ((uint64_t)-1)
258 #endif
259
260 #ifndef CHAR_BIT
261 #define CHAR_BIT 8
262 #endif
263
264 #ifndef INT32_MAX
265 #define INT32_MAX _TYPE_MAXIMUM(int32_t)
266 #endif
267
268 #ifdef HAVE_STDBOOL_H
269 #include <stdbool.h>
270 #elif !defined(HAVE_BOOL)
271 #define __bool_true_false_are_defined
272 typedef int bool;
273 #define false (0)
274 #define true (1)
275 #endif
276
277 #ifndef HAVE_FUNCTION_MACRO
278 #ifdef HAVE_func_MACRO
279 #define __FUNCTION__ __func__
280 #else
281 #define __FUNCTION__ ("")
282 #endif
283 #endif
284
285 #ifdef HAVE_SYS_PARAM_H
286 #include <sys/param.h>
287 #endif
288
289 #ifndef MIN
290 #define MIN(a,b) ((a)<(b)?(a):(b))
291 #endif
292
293 #ifndef MAX
294 #define MAX(a,b) ((a)>(b)?(a):(b))
295 #endif
296
297 #ifndef __STRING
298 #define __STRING(x)    #x
299 #endif
300
301 #endif