2 Unix SMB/CIFS implementation.
4 macros to go along with the lib/replace/ portability layer code
6 Copyright (C) Andrew Tridgell 2005
7 Copyright (C) Jelmer Vernooij 2006
9 ** NOTE! The following LGPL license applies to the replace
10 ** library. This does NOT imply that all of Samba is released
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.
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.
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
33 #ifdef HAVE_STANDARDS_H
34 #include <standards.h>
42 #if defined(_MSC_VER) || defined(__MINGW32__)
43 #include "lib/replace/win32/replace.h"
47 #define QSORT_CAST (__compar_fn_t)
51 #define QSORT_CAST (int (*)(const void *, const void *))
68 #ifdef HAVE_SYS_TYPES_H
69 #include <sys/types.h>
77 extern char *sys_errlist[];
78 #define strerror(i) sys_errlist[i]
81 #ifndef HAVE_ERRNO_DECL
86 #define strdup rep_strdup
87 char *rep_strdup(const char *s);
91 #define memmove rep_memmove
92 void *rep_memmove(void *dest,const void *src,int size);
95 #if !defined(HAVE_MKTIME) || !defined(HAVE_TIMEGM)
96 #include "system/time.h"
100 #define mktime rep_mktime
101 time_t rep_mktime(struct tm *t);
106 #define timegm rep_timegm
107 time_t rep_timegm(struct tm *tm);
111 #define strlcpy rep_strlcpy
112 size_t rep_strlcpy(char *d, const char *s, size_t bufsize);
116 #define strlcat rep_strlcat
117 size_t rep_strlcat(char *d, const char *s, size_t bufsize);
121 #define strndup rep_strndup
122 char *rep_strndup(const char *s, size_t n);
126 #define strnlen rep_strnlen
127 size_t rep_strnlen(const char *s, size_t n);
131 #define setenv rep_setenv
132 int rep_setenv(const char *name, const char *value, int overwrite);
136 #define seteuid rep_seteuid
137 int rep_seteuid(uid_t);
141 #define setegid rep_setegid
142 int rep_setegid(gid_t);
145 #ifndef HAVE_SETLINEBUF
146 #define setlinebuf rep_setlinebuf
147 void rep_setlinebuf(FILE *);
150 #ifndef HAVE_STRCASESTR
151 #define strcasestr rep_strcasestr
152 char *rep_strcasestr(const char *haystack, const char *needle);
155 #ifndef HAVE_STRTOK_R
156 #define strtok_r rep_strtok_r
157 char *rep_strtok_r(char *s, const char *delim, char **save_ptr);
161 #define strtoll rep_strtoll
162 long long int rep_strtoll(const char *str, char **endptr, int base);
165 #ifndef HAVE_STRTOULL
166 #define strtoull rep_strtoull
167 unsigned long long int rep_strtoull(const char *str, char **endptr, int base);
170 #ifndef HAVE_FTRUNCATE
171 #define ftruncate rep_ftruncate
172 int rep_ftruncate(int,off_t);
175 #ifndef HAVE_INITGROUPS
176 #define ftruncate rep_ftruncate
177 int rep_initgroups(char *name, gid_t id);
180 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
181 #define bzero(a,b) memset((a),'\0',(b))
185 #define dlerror rep_dlerror
186 char *rep_dlerror(void);
190 #define dlopen rep_dlopen
191 void *rep_dlopen(const char *name, int flags);
195 #define dlsym rep_dlsym
196 void *rep_dlsym(void *handle, const char *symbol);
200 #define dlclose rep_dlclose
201 int rep_dlclose(void *handle);
205 #ifndef PRINTF_ATTRIBUTE
207 /** Use gcc attribute to check printf fns. a1 is the 1-based index of
208 * the parameter containing the format, and a2 the index of the first
209 * argument. Note that some gcc 2.x versions don't handle this
211 #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
213 #define PRINTF_ATTRIBUTE(a1, a2)
217 #ifndef HAVE_VASPRINTF
218 #define vasprintf rep_vasprintf
219 int rep_vasprintf(char **ptr, const char *format, va_list ap);
222 #ifndef HAVE_SNPRINTF
223 #define snprintf rep_snprintf
224 int rep_snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
227 #ifndef HAVE_VSNPRINTF
228 #define vsnprintf rep_vsnprintf
229 int rep_vsnprintf(char *,size_t ,const char *, va_list ap);
232 #ifndef HAVE_ASPRINTF
233 #define asprintf rep_asprintf
234 int rep_asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
238 /* we used to use these fns, but now we have good replacements
239 for snprintf and vsnprintf */
240 #define slprintf snprintf
245 #ifdef HAVE___VA_COPY
246 #define va_copy(dest, src) __va_copy(dest, src)
248 #define va_copy(dest, src) (dest) = (src)
252 #ifndef HAVE_VOLATILE
256 #ifndef HAVE_COMPARISON_FN_T
257 typedef int (*comparison_fn_t)(const void *, const void *);
260 /* Load header file for dynamic linking stuff */
269 #ifndef HAVE_SECURE_MKSTEMP
270 #define mkstemp(path) rep_mkstemp(path)
271 int rep_mkstemp(char *temp);
275 #define mkdtemp rep_mkdtemp
276 char *rep_mkdtemp(char *template);
283 /* The extra casts work around common compiler bugs. */
284 #define _TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
285 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
286 It is necessary at least when t == time_t. */
287 #define _TYPE_MINIMUM(t) ((t) (_TYPE_SIGNED (t) \
288 ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
289 #define _TYPE_MAXIMUM(t) ((t) (~ (t) 0 - _TYPE_MINIMUM (t)))
291 #ifndef HOST_NAME_MAX
292 #define HOST_NAME_MAX 64
296 #define UINT16_MAX 65535
300 #define UINT32_MAX (4294967295U)
304 #define UINT64_MAX ((uint64_t)-1)
312 #define INT32_MAX _TYPE_MAXIMUM(int32_t)
315 #ifdef HAVE_STDBOOL_H
319 #if !defined(HAVE_BOOL)
323 #define __bool_true_false_are_defined
335 #ifndef HAVE_FUNCTION_MACRO
336 #ifdef HAVE_func_MACRO
337 #define __FUNCTION__ __func__
339 #define __FUNCTION__ ("")
343 #ifdef HAVE_SYS_PARAM_H
344 #include <sys/param.h>
348 #define MIN(a,b) ((a)<(b)?(a):(b))
352 #define MAX(a,b) ((a)>(b)?(a):(b))
356 #define __STRING(x) #x