Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/include/platform.h
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/include/platform.h
r1765 r2725 1 1 /* vi: set sw=4 ts=4: */ 2 2 /* 3 Copyright 2006, Bernhard Fischer 4 5 Licensed under the GPL v2 or later, see the file LICENSE in this tarball. 6 */ 7 #ifndef __PLATFORM_H 8 #define __PLATFORM_H 1 3 * Copyright 2006, Bernhard Reutner-Fischer 4 * 5 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 6 */ 7 #ifndef BB_PLATFORM_H 8 #define BB_PLATFORM_H 1 9 10 /* Assume all these functions exist by default. Platforms where it is not 11 * true will #undef them below. 12 */ 13 #define HAVE_FDPRINTF 1 14 #define HAVE_MEMRCHR 1 15 #define HAVE_MKDTEMP 1 16 #define HAVE_SETBIT 1 17 #define HAVE_STRCASESTR 1 18 #define HAVE_STRCHRNUL 1 19 #define HAVE_STRSEP 1 20 #define HAVE_STRSIGNAL 1 21 #define HAVE_VASPRINTF 1 9 22 10 23 /* Convenience macros to test the version of gcc. */ … … 18 31 19 32 /* __restrict is known in EGCS 1.2 and above. */ 20 #if !__GNUC_PREREQ 33 #if !__GNUC_PREREQ(2,92) 21 34 # ifndef __restrict 22 # define __restrict /* Ignore */35 # define __restrict 23 36 # endif 24 37 #endif … … 28 41 version of gcc in which they are supported. */ 29 42 30 #if !__GNUC_PREREQ 43 #if !__GNUC_PREREQ(2,7) 31 44 # ifndef __attribute__ 32 45 # define __attribute__(x) … … 37 50 #if defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L 38 51 /* it's a keyword */ 39 #else 40 # if __GNUC_PREREQ (2,7) 41 # define inline __inline__ 42 # else 43 # define inline 44 # endif 52 #elif __GNUC_PREREQ(2,7) 53 # define inline __inline__ 54 #else 55 # define inline 45 56 #endif 46 57 … … 49 60 #endif 50 61 51 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 52 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) 53 # define ATTRIBUTE_PACKED __attribute__ ((__packed__)) 54 # define ATTRIBUTE_ALIGNED(m) __attribute__ ((__aligned__(m))) 55 # if __GNUC_PREREQ (3,0) 56 # define ALWAYS_INLINE __attribute__ ((always_inline)) inline 57 # if !ENABLE_WERROR 58 # define ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) 59 # define ATTRIBUTE_UNUSED_RESULT __attribute__ ((warn_unused_result)) 60 # else 61 # define ATTRIBUTE_DEPRECATED /* n/a */ 62 # define ATTRIBUTE_UNUSED_RESULT /* n/a */ 63 # endif 62 #define UNUSED_PARAM __attribute__ ((__unused__)) 63 #define NORETURN __attribute__ ((__noreturn__)) 64 /* "The malloc attribute is used to tell the compiler that a function 65 * may be treated as if any non-NULL pointer it returns cannot alias 66 * any other pointer valid when the function returns. This will often 67 * improve optimization. Standard functions with this property include 68 * malloc and calloc. realloc-like functions have this property as long 69 * as the old pointer is never referred to (including comparing it 70 * to the new pointer) after the function returns a non-NULL value." 71 */ 72 #define RETURNS_MALLOC __attribute__ ((malloc)) 73 #define PACKED __attribute__ ((__packed__)) 74 #define ALIGNED(m) __attribute__ ((__aligned__(m))) 75 76 /* __NO_INLINE__: some gcc's do not honor inlining! :( */ 77 #if __GNUC_PREREQ(3,0) && !defined(__NO_INLINE__) 78 # define ALWAYS_INLINE __attribute__ ((always_inline)) inline 79 /* I've seen a toolchain where I needed __noinline__ instead of noinline */ 80 # define NOINLINE __attribute__((__noinline__)) 81 # if !ENABLE_WERROR 82 # define DEPRECATED __attribute__ ((__deprecated__)) 83 # define UNUSED_PARAM_RESULT __attribute__ ((warn_unused_result)) 64 84 # else 65 # define ALWAYS_INLINE inline 66 # define ATTRIBUTE_DEPRECATED /* n/a */ 67 # define ATTRIBUTE_UNUSED_RESULT /* n/a */ 68 # endif 85 # define DEPRECATED 86 # define UNUSED_PARAM_RESULT 87 # endif 88 #else 89 # define ALWAYS_INLINE inline 90 # define NOINLINE 91 # define DEPRECATED 92 # define UNUSED_PARAM_RESULT 93 #endif 69 94 70 95 /* -fwhole-program makes all symbols local. The attribute externally_visible 71 96 forces a symbol global. */ 72 # if __GNUC_PREREQ (4,1) 73 # define ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((__externally_visible__)) 74 # else 75 # define ATTRIBUTE_EXTERNALLY_VISIBLE 76 # endif /* GNUC >= 4.1 */ 97 #if __GNUC_PREREQ(4,1) 98 # define EXTERNALLY_VISIBLE __attribute__(( visibility("default") )) 99 //__attribute__ ((__externally_visible__)) 100 #else 101 # define EXTERNALLY_VISIBLE 102 #endif 103 104 /* At 4.4 gcc become much more anal about this, need to use "aliased" types */ 105 #if __GNUC_PREREQ(4,4) 106 # define FIX_ALIASING __attribute__((__may_alias__)) 107 #else 108 # define FIX_ALIASING 109 #endif 77 110 78 111 /* We use __extension__ in some places to suppress -pedantic warnings 79 112 about GCC extensions. This feature didn't work properly before 80 113 gcc 2.8. */ 81 #if !__GNUC_PREREQ 114 #if !__GNUC_PREREQ(2,8) 82 115 # ifndef __extension__ 83 116 # define __extension__ … … 86 119 87 120 /* gcc-2.95 had no va_copy but only __va_copy. */ 88 #if !__GNUC_PREREQ 121 #if !__GNUC_PREREQ(3,0) 89 122 # include <stdarg.h> 90 123 # if !defined va_copy && defined __va_copy … … 93 126 #endif 94 127 128 /* FAST_FUNC is a qualifier which (possibly) makes function call faster 129 * and/or smaller by using modified ABI. It is usually only needed 130 * on non-static, busybox internal functions. Recent versions of gcc 131 * optimize statics automatically. FAST_FUNC on static is required 132 * only if you need to match a function pointer's type */ 133 #if __GNUC_PREREQ(3,0) && defined(i386) /* || defined(__x86_64__)? */ 134 /* stdcall makes callee to pop arguments from stack, not caller */ 135 # define FAST_FUNC __attribute__((regparm(3),stdcall)) 136 /* #elif ... - add your favorite arch today! */ 137 #else 138 # define FAST_FUNC 139 #endif 140 141 /* Make all declarations hidden (-fvisibility flag only affects definitions) */ 142 /* (don't include system headers after this until corresponding pop!) */ 143 #if __GNUC_PREREQ(4,1) 144 # define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN _Pragma("GCC visibility push(hidden)") 145 # define POP_SAVED_FUNCTION_VISIBILITY _Pragma("GCC visibility pop") 146 #else 147 # define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 148 # define POP_SAVED_FUNCTION_VISIBILITY 149 #endif 150 95 151 /* ---- Endian Detection ------------------------------------ */ 96 152 97 #if (defined __digital__ && defined __unix__) 153 #include <limits.h> 154 #if defined(__digital__) && defined(__unix__) 98 155 # include <sex.h> 99 # define __BIG_ENDIAN__ (BYTE_ORDER == BIG_ENDIAN) 100 # define __BYTE_ORDER BYTE_ORDER 101 #elif !defined __APPLE__ 156 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \ 157 || defined(__APPLE__) 158 # include <sys/resource.h> /* rlimit */ 159 # include <machine/endian.h> 160 # define bswap_64 __bswap64 161 # define bswap_32 __bswap32 162 # define bswap_16 __bswap16 163 #else 102 164 # include <byteswap.h> 103 165 # include <endian.h> 104 166 #endif 105 167 106 #if def __BIG_ENDIAN__168 #if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN 107 169 # define BB_BIG_ENDIAN 1 108 170 # define BB_LITTLE_ENDIAN 0 109 #elif __BYTE_ORDER == __BIG_ENDIAN 171 #elif defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN 172 # define BB_BIG_ENDIAN 0 173 # define BB_LITTLE_ENDIAN 1 174 #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN 110 175 # define BB_BIG_ENDIAN 1 111 176 # define BB_LITTLE_ENDIAN 0 112 #el se177 #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN 113 178 # define BB_BIG_ENDIAN 0 114 179 # define BB_LITTLE_ENDIAN 1 115 #endif 116 180 #elif defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN 181 # define BB_BIG_ENDIAN 1 182 # define BB_LITTLE_ENDIAN 0 183 #elif defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN 184 # define BB_BIG_ENDIAN 0 185 # define BB_LITTLE_ENDIAN 1 186 #elif defined(__386__) 187 # define BB_BIG_ENDIAN 0 188 # define BB_LITTLE_ENDIAN 1 189 #else 190 # error "Can't determine endianness" 191 #endif 192 193 #if ULONG_MAX > 0xffffffff 194 # define bb_bswap_64(x) bswap_64(x) 195 #endif 196 197 /* SWAP_LEnn means "convert CPU<->little_endian by swapping bytes" */ 117 198 #if BB_BIG_ENDIAN 118 #define SWAP_BE16(x) (x) 119 #define SWAP_BE32(x) (x) 120 #define SWAP_BE64(x) (x) 121 #define SWAP_LE16(x) bswap_16(x) 122 #define SWAP_LE32(x) bswap_32(x) 123 #define SWAP_LE64(x) bswap_64(x) 124 #else 125 #define SWAP_BE16(x) bswap_16(x) 126 #define SWAP_BE32(x) bswap_32(x) 127 #define SWAP_BE64(x) bswap_64(x) 128 #define SWAP_LE16(x) (x) 129 #define SWAP_LE32(x) (x) 130 #define SWAP_LE64(x) (x) 131 #endif 132 133 /* ---- Networking ------------------------------------------ */ 134 #ifndef __APPLE__ 135 # include <arpa/inet.h> 136 #else 137 # include <netinet/in.h> 138 #endif 139 140 #ifndef __socklen_t_defined 141 typedef int socklen_t; 199 # define SWAP_BE16(x) (x) 200 # define SWAP_BE32(x) (x) 201 # define SWAP_BE64(x) (x) 202 # define SWAP_LE16(x) bswap_16(x) 203 # define SWAP_LE32(x) bswap_32(x) 204 # define SWAP_LE64(x) bb_bswap_64(x) 205 # define IF_BIG_ENDIAN(...) __VA_ARGS__ 206 # define IF_LITTLE_ENDIAN(...) 207 #else 208 # define SWAP_BE16(x) bswap_16(x) 209 # define SWAP_BE32(x) bswap_32(x) 210 # define SWAP_BE64(x) bb_bswap_64(x) 211 # define SWAP_LE16(x) (x) 212 # define SWAP_LE32(x) (x) 213 # define SWAP_LE64(x) (x) 214 # define IF_BIG_ENDIAN(...) 215 # define IF_LITTLE_ENDIAN(...) __VA_ARGS__ 216 #endif 217 218 /* ---- Unaligned access ------------------------------------ */ 219 220 /* NB: unaligned parameter should be a pointer, aligned one - 221 * a lvalue. This makes it more likely to not swap them by mistake 222 */ 223 #if defined(i386) || defined(__x86_64__) || defined(__powerpc__) 224 # include <stdint.h> 225 typedef int bb__aliased_int FIX_ALIASING; 226 typedef uint16_t bb__aliased_uint16_t FIX_ALIASING; 227 typedef uint32_t bb__aliased_uint32_t FIX_ALIASING; 228 # define move_from_unaligned_int(v, intp) ((v) = *(bb__aliased_int*)(intp)) 229 # define move_from_unaligned16(v, u16p) ((v) = *(bb__aliased_uint16_t*)(u16p)) 230 # define move_from_unaligned32(v, u32p) ((v) = *(bb__aliased_uint32_t*)(u32p)) 231 # define move_to_unaligned16(u16p, v) (*(bb__aliased_uint16_t*)(u16p) = (v)) 232 # define move_to_unaligned32(u32p, v) (*(bb__aliased_uint32_t*)(u32p) = (v)) 233 /* #elif ... - add your favorite arch today! */ 234 #else 235 /* performs reasonably well (gcc usually inlines memcpy here) */ 236 # define move_from_unaligned_int(v, intp) (memcpy(&(v), (intp), sizeof(int))) 237 # define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2)) 238 # define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4)) 239 # define move_to_unaligned16(u16p, v) do { \ 240 uint16_t __t = (v); \ 241 memcpy((u16p), &__t, 4); \ 242 } while (0) 243 # define move_to_unaligned32(u32p, v) do { \ 244 uint32_t __t = (v); \ 245 memcpy((u32p), &__t, 4); \ 246 } while (0) 142 247 #endif 143 248 144 249 /* ---- Compiler dependent settings ------------------------- */ 145 #if (defined __digital__ && defined __unix__) 250 251 #if (defined __digital__ && defined __unix__) \ 252 || defined __APPLE__ \ 253 || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ 146 254 # undef HAVE_MNTENT_H 255 # undef HAVE_SYS_STATFS_H 147 256 #else 148 257 # define HAVE_MNTENT_H 1 149 #endif /* ___digital__ && __unix__ */ 150 151 /* linux/loop.h relies on __u64. Make sure we have that as a proper type 152 * until userspace is widely fixed. */ 153 #ifndef __GNUC__ 154 #if defined __INTEL_COMPILER 155 __extension__ typedef __signed__ long long __s64; 156 __extension__ typedef unsigned long long __u64; 157 #endif /* __INTEL_COMPILER */ 158 #endif /* ifndef __GNUC__ */ 258 # define HAVE_SYS_STATFS_H 1 259 #endif 159 260 160 261 /*----- Kernel versioning ------------------------------------*/ 262 161 263 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) 162 264 163 /* ---- miscellaneous --------------------------------------- */ 164 165 #if defined(__GNU_LIBRARY__) && __GNU_LIBRARY__ < 5 && \ 166 !defined(__dietlibc__) && \ 167 !defined(_NEWLIB_VERSION) && \ 168 !(defined __digital__ && defined __unix__) 169 # error "Sorry, this libc version is not supported :(" 170 #endif 171 172 /* Don't perpetuate e2fsck crap into the headers. Clean up e2fsck instead. */ 265 /* ---- Miscellaneous --------------------------------------- */ 173 266 174 267 #if defined __GLIBC__ || defined __UCLIBC__ \ 175 || defined __dietlibc__ || defined _NEWLIB_VERSION 176 #include <features.h> 177 #define HAVE_FEATURES_H 178 #include <stdint.h> 179 #define HAVE_STDINT_H 180 #else 181 /* Largest integral types. */ 182 #if __BIG_ENDIAN__ 183 typedef long intmax_t; 184 typedef unsigned long uintmax_t; 185 #else 186 __extension__ 187 typedef long long intmax_t; 188 __extension__ 189 typedef unsigned long long uintmax_t; 190 #endif 268 || defined __dietlibc__ || defined _NEWLIB_VERSION 269 # include <features.h> 191 270 #endif 192 271 … … 205 284 #if (defined __digital__ && defined __unix__) 206 285 /* old system without (proper) C99 support */ 207 # define bool smalluint286 # define bool smalluint 208 287 #else 209 288 /* modern system, so use it */ 210 # include <stdbool.h>289 # include <stdbool.h> 211 290 #endif 212 291 213 292 /* Try to defeat gcc's alignment of "char message[]"-like data */ 214 293 #if 1 /* if needed: !defined(arch1) && !defined(arch2) */ 215 #define ALIGN1 __attribute__((aligned(1))) 216 #define ALIGN2 __attribute__((aligned(2))) 294 # define ALIGN1 __attribute__((aligned(1))) 295 # define ALIGN2 __attribute__((aligned(2))) 296 # define ALIGN4 __attribute__((aligned(4))) 217 297 #else 218 298 /* Arches which MUST have 2 or 4 byte alignment for everything are here */ 219 #define ALIGN1 220 #define ALIGN2 299 # define ALIGN1 300 # define ALIGN2 301 # define ALIGN4 221 302 #endif 222 303 … … 225 306 * For 0.9.29 and svn, __ARCH_USE_MMU__ indicates no-mmu reliably. 226 307 * For earlier versions there is no reliable way to check if we are building 227 * for a mmu-less system; the user should pass EXTRA_CFLAGS="-DBB_NOMMU" 228 * on his own. 229 */ 230 #if defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ 231 __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__ 232 #define BB_MMU 0 233 #define BB_NOMMU 1 234 #define USE_FOR_NOMMU(...) __VA_ARGS__ 235 #define USE_FOR_MMU(...) 236 #else 237 #define BB_MMU 1 238 /* BB_NOMMU is not defined in this case! */ 239 #define USE_FOR_NOMMU(...) 240 #define USE_FOR_MMU(...) __VA_ARGS__ 241 #endif 242 243 /* Platforms that haven't got dprintf need to implement fdprintf() in 244 * libbb. This would require a platform.c. It's not going to be cleaned 245 * out of the tree, so stop saying it should be. */ 246 #if !defined(__dietlibc__) 247 /* Needed for: glibc */ 248 /* Not needed for: dietlibc */ 249 /* Others: ?? (add as needed) */ 250 #define fdprintf dprintf 308 * for a mmu-less system. 309 */ 310 #if ENABLE_NOMMU || \ 311 (defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ 312 __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__) 313 # define BB_MMU 0 314 # define USE_FOR_NOMMU(...) __VA_ARGS__ 315 # define USE_FOR_MMU(...) 316 #else 317 # define BB_MMU 1 318 # define USE_FOR_NOMMU(...) 319 # define USE_FOR_MMU(...) __VA_ARGS__ 320 #endif 321 322 /* Don't use lchown with glibc older than 2.1.x */ 323 #if defined(__GLIBC__) && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1 324 # define lchown chown 325 #endif 326 327 #if defined(__digital__) && defined(__unix__) 328 329 # include <standards.h> 330 # include <inttypes.h> 331 # define PRIu32 "u" 332 /* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */ 333 # define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me, __me); } while (0) 334 # if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET 335 # define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) 336 # endif 337 # if !defined ADJ_FREQUENCY && defined MOD_FREQUENCY 338 # define ADJ_FREQUENCY MOD_FREQUENCY 339 # endif 340 # if !defined ADJ_TIMECONST && defined MOD_TIMECONST 341 # define ADJ_TIMECONST MOD_TIMECONST 342 # endif 343 # if !defined ADJ_TICK && defined MOD_CLKB 344 # define ADJ_TICK MOD_CLKB 345 # endif 346 347 #else 348 349 # define bb_setpgrp() setpgrp() 350 351 #endif 352 353 #if defined(__GLIBC__) 354 # define fdprintf dprintf 251 355 #endif 252 356 253 357 #if defined(__dietlibc__) 254 static ALWAYS_INLINE char* strchrnul(const char *s, char c) 255 { 256 while (*s && *s != c) ++s; 257 return (char*)s; 258 } 259 #endif 260 261 /* Don't use lchown with glibc older than 2.1.x ... uClibc lacks it */ 262 #if (defined __GLIBC__ && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1) || \ 263 defined __UC_LIBC__ 264 # define lchown chown 265 #endif 266 267 /* THIS SHOULD BE CLEANED OUT OF THE TREE ENTIRELY */ 268 /* FIXME: fix tar.c! */ 269 #ifndef FNM_LEADING_DIR 270 #define FNM_LEADING_DIR 0 271 #endif 272 273 #if (defined __digital__ && defined __unix__) 274 #include <standards.h> 275 #define HAVE_STANDARDS_H 276 #include <inttypes.h> 277 #define HAVE_INTTYPES_H 278 #define PRIu32 "u" 279 280 /* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */ 281 #define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me,__me); } while (0) 282 283 #if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET 284 #define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) 285 #endif 286 #if !defined ADJ_FREQUENCY && defined MOD_FREQUENCY 287 #define ADJ_FREQUENCY MOD_FREQUENCY 288 #endif 289 #if !defined ADJ_TIMECONST && defined MOD_TIMECONST 290 #define ADJ_TIMECONST MOD_TIMECONST 291 #endif 292 #if !defined ADJ_TICK && defined MOD_CLKB 293 #define ADJ_TICK MOD_CLKB 294 #endif 295 296 #else 297 #define bb_setpgrp() setpgrp() 298 #endif 299 300 #if defined(__linux__) 301 #include <sys/mount.h> 302 /* Make sure we have all the new mount flags we actually try to use. */ 303 #ifndef MS_BIND 304 #define MS_BIND (1<<12) 305 #endif 306 #ifndef MS_MOVE 307 #define MS_MOVE (1<<13) 308 #endif 309 #ifndef MS_RECURSIVE 310 #define MS_RECURSIVE (1<<14) 311 #endif 312 #ifndef MS_SILENT 313 #define MS_SILENT (1<<15) 314 #endif 315 316 /* The shared subtree stuff, which went in around 2.6.15. */ 317 #ifndef MS_UNBINDABLE 318 #define MS_UNBINDABLE (1<<17) 319 #endif 320 #ifndef MS_PRIVATE 321 #define MS_PRIVATE (1<<18) 322 #endif 323 #ifndef MS_SLAVE 324 #define MS_SLAVE (1<<19) 325 #endif 326 #ifndef MS_SHARED 327 #define MS_SHARED (1<<20) 328 #endif 329 330 331 #if !defined(BLKSSZGET) 332 #define BLKSSZGET _IO(0x12, 104) 333 #endif 334 #if !defined(BLKGETSIZE64) 335 #define BLKGETSIZE64 _IOR(0x12,114,size_t) 336 #endif 337 #endif 338 339 #endif /* platform.h */ 358 # undef HAVE_STRCHRNUL 359 #endif 360 361 #if defined(__WATCOMC__) 362 # undef HAVE_FDPRINTF 363 # undef HAVE_MEMRCHR 364 # undef HAVE_MKDTEMP 365 # undef HAVE_SETBIT 366 # undef HAVE_STRCASESTR 367 # undef HAVE_STRCHRNUL 368 # undef HAVE_STRSEP 369 # undef HAVE_STRSIGNAL 370 # undef HAVE_VASPRINTF 371 #endif 372 373 #if defined(__FreeBSD__) 374 # undef HAVE_STRCHRNUL 375 #endif 376 377 /* 378 * Now, define prototypes for all the functions defined in platform.c 379 * These must come after all the HAVE_* macros are defined (or not) 380 */ 381 382 #ifndef HAVE_FDPRINTF 383 extern int fdprintf(int fd, const char *format, ...); 384 #endif 385 386 #ifndef HAVE_MEMRCHR 387 extern void *memrchr(const void *s, int c, size_t n) FAST_FUNC; 388 #endif 389 390 #ifndef HAVE_MKDTEMP 391 extern char *mkdtemp(char *template) FAST_FUNC; 392 #endif 393 394 #ifndef HAVE_SETBIT 395 # define setbit(a, b) ((a)[(b) >> 3] |= 1 << ((b) & 7)) 396 # define clrbit(a, b) ((a)[(b) >> 3] &= ~(1 << ((b) & 7))) 397 #endif 398 399 #ifndef HAVE_STRCASESTR 400 extern char *strcasestr(const char *s, const char *pattern) FAST_FUNC; 401 #endif 402 403 #ifndef HAVE_STRCHRNUL 404 extern char *strchrnul(const char *s, int c) FAST_FUNC; 405 #endif 406 407 #ifndef HAVE_STRSEP 408 extern char *strsep(char **stringp, const char *delim) FAST_FUNC; 409 #endif 410 411 #ifndef HAVE_STRSIGNAL 412 /* Not exactly the same: instead of "Stopped" it shows "STOP" etc */ 413 # define strsignal(sig) get_signame(sig) 414 #endif 415 416 #ifndef HAVE_VASPRINTF 417 extern int vasprintf(char **string_ptr, const char *format, va_list p) FAST_FUNC; 418 #endif 419 420 #endif
Note:
See TracChangeset
for help on using the changeset viewer.