diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-05-19 13:18:45 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-05-19 13:18:45 +0200 |
commit | 5a49d284a6a9f6cf2076f23561f95aebdfd44592 (patch) | |
tree | 3e51b2c326a9c7d3b18f3d04c91b6af9e5c0621a /include/platform.h | |
parent | 167cd709df06fb0f7aa346a32133d54ed3ae6c48 (diff) | |
download | busybox-w32-5a49d284a6a9f6cf2076f23561f95aebdfd44592.tar.gz busybox-w32-5a49d284a6a9f6cf2076f23561f95aebdfd44592.tar.bz2 busybox-w32-5a49d284a6a9f6cf2076f23561f95aebdfd44592.zip |
add platform tweaks
login: consider platforms having no domainname field in the utsname struct
include/platform.h: define IUCLC to 0 on platforms where it is not defined
Signed-off-by: Luca Favatella <slackydeb@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'include/platform.h')
-rw-r--r-- | include/platform.h | 166 |
1 files changed, 87 insertions, 79 deletions
diff --git a/include/platform.h b/include/platform.h index 317349fed..e2136a2ea 100644 --- a/include/platform.h +++ b/include/platform.h | |||
@@ -19,7 +19,7 @@ | |||
19 | /* __restrict is known in EGCS 1.2 and above. */ | 19 | /* __restrict is known in EGCS 1.2 and above. */ |
20 | #if !__GNUC_PREREQ(2,92) | 20 | #if !__GNUC_PREREQ(2,92) |
21 | # ifndef __restrict | 21 | # ifndef __restrict |
22 | # define __restrict /* Ignore */ | 22 | # define __restrict |
23 | # endif | 23 | # endif |
24 | #endif | 24 | #endif |
25 | 25 | ||
@@ -61,14 +61,14 @@ | |||
61 | # define DEPRECATED __attribute__ ((__deprecated__)) | 61 | # define DEPRECATED __attribute__ ((__deprecated__)) |
62 | # define UNUSED_PARAM_RESULT __attribute__ ((warn_unused_result)) | 62 | # define UNUSED_PARAM_RESULT __attribute__ ((warn_unused_result)) |
63 | # else | 63 | # else |
64 | # define DEPRECATED /* n/a */ | 64 | # define DEPRECATED |
65 | # define UNUSED_PARAM_RESULT /* n/a */ | 65 | # define UNUSED_PARAM_RESULT |
66 | # endif | 66 | # endif |
67 | #else | 67 | #else |
68 | # define ALWAYS_INLINE inline /* n/a */ | 68 | # define ALWAYS_INLINE inline |
69 | # define NOINLINE /* n/a */ | 69 | # define NOINLINE |
70 | # define DEPRECATED /* n/a */ | 70 | # define DEPRECATED |
71 | # define UNUSED_PARAM_RESULT /* n/a */ | 71 | # define UNUSED_PARAM_RESULT |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | /* -fwhole-program makes all symbols local. The attribute externally_visible | 74 | /* -fwhole-program makes all symbols local. The attribute externally_visible |
@@ -144,19 +144,19 @@ | |||
144 | 144 | ||
145 | /* SWAP_LEnn means "convert CPU<->little_endian by swapping bytes" */ | 145 | /* SWAP_LEnn means "convert CPU<->little_endian by swapping bytes" */ |
146 | #if BB_BIG_ENDIAN | 146 | #if BB_BIG_ENDIAN |
147 | #define SWAP_BE16(x) (x) | 147 | # define SWAP_BE16(x) (x) |
148 | #define SWAP_BE32(x) (x) | 148 | # define SWAP_BE32(x) (x) |
149 | #define SWAP_BE64(x) (x) | 149 | # define SWAP_BE64(x) (x) |
150 | #define SWAP_LE16(x) bswap_16(x) | 150 | # define SWAP_LE16(x) bswap_16(x) |
151 | #define SWAP_LE32(x) bswap_32(x) | 151 | # define SWAP_LE32(x) bswap_32(x) |
152 | #define SWAP_LE64(x) bswap_64(x) | 152 | # define SWAP_LE64(x) bswap_64(x) |
153 | #else | 153 | #else |
154 | #define SWAP_BE16(x) bswap_16(x) | 154 | # define SWAP_BE16(x) bswap_16(x) |
155 | #define SWAP_BE32(x) bswap_32(x) | 155 | # define SWAP_BE32(x) bswap_32(x) |
156 | #define SWAP_BE64(x) bswap_64(x) | 156 | # define SWAP_BE64(x) bswap_64(x) |
157 | #define SWAP_LE16(x) (x) | 157 | # define SWAP_LE16(x) (x) |
158 | #define SWAP_LE32(x) (x) | 158 | # define SWAP_LE32(x) (x) |
159 | #define SWAP_LE64(x) (x) | 159 | # define SWAP_LE64(x) (x) |
160 | #endif | 160 | #endif |
161 | 161 | ||
162 | /* ---- Unaligned access ------------------------------------ */ | 162 | /* ---- Unaligned access ------------------------------------ */ |
@@ -165,15 +165,15 @@ | |||
165 | * a lvalue. This makes it more likely to not swap them by mistake | 165 | * a lvalue. This makes it more likely to not swap them by mistake |
166 | */ | 166 | */ |
167 | #if defined(i386) || defined(__x86_64__) | 167 | #if defined(i386) || defined(__x86_64__) |
168 | #define move_from_unaligned16(v, u16p) ((v) = *(uint16_t*)(u16p)) | 168 | # define move_from_unaligned16(v, u16p) ((v) = *(uint16_t*)(u16p)) |
169 | #define move_from_unaligned32(v, u32p) ((v) = *(uint32_t*)(u32p)) | 169 | # define move_from_unaligned32(v, u32p) ((v) = *(uint32_t*)(u32p)) |
170 | #define move_to_unaligned32(u32p, v) (*(uint32_t*)(u32p) = (v)) | 170 | # define move_to_unaligned32(u32p, v) (*(uint32_t*)(u32p) = (v)) |
171 | /* #elif ... - add your favorite arch today! */ | 171 | /* #elif ... - add your favorite arch today! */ |
172 | #else | 172 | #else |
173 | /* performs reasonably well (gcc usually inlines memcpy here) */ | 173 | /* performs reasonably well (gcc usually inlines memcpy here) */ |
174 | #define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2)) | 174 | # define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2)) |
175 | #define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4)) | 175 | # define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4)) |
176 | #define move_to_unaligned32(u32p, v) do { \ | 176 | # define move_to_unaligned32(u32p, v) do { \ |
177 | uint32_t __t = (v); \ | 177 | uint32_t __t = (v); \ |
178 | memcpy((u32p), &__t, 4); \ | 178 | memcpy((u32p), &__t, 4); \ |
179 | } while (0) | 179 | } while (0) |
@@ -225,21 +225,21 @@ __extension__ typedef unsigned long long __u64; | |||
225 | 225 | ||
226 | #if defined __GLIBC__ || defined __UCLIBC__ \ | 226 | #if defined __GLIBC__ || defined __UCLIBC__ \ |
227 | || defined __dietlibc__ || defined _NEWLIB_VERSION | 227 | || defined __dietlibc__ || defined _NEWLIB_VERSION |
228 | #include <features.h> | 228 | # include <features.h> |
229 | #define HAVE_FEATURES_H | 229 | # define HAVE_FEATURES_H |
230 | #include <stdint.h> | 230 | # include <stdint.h> |
231 | #define HAVE_STDINT_H | 231 | # define HAVE_STDINT_H |
232 | #elif !defined __APPLE__ | 232 | #elif !defined __APPLE__ |
233 | /* Largest integral types. */ | 233 | /* Largest integral types. */ |
234 | #if __BIG_ENDIAN__ | 234 | # if __BIG_ENDIAN__ |
235 | typedef long intmax_t; | 235 | typedef long intmax_t; |
236 | typedef unsigned long uintmax_t; | 236 | typedef unsigned long uintmax_t; |
237 | #else | 237 | # else |
238 | __extension__ | 238 | __extension__ |
239 | typedef long long intmax_t; | 239 | typedef long long intmax_t; |
240 | __extension__ | 240 | __extension__ |
241 | typedef unsigned long long uintmax_t; | 241 | typedef unsigned long long uintmax_t; |
242 | #endif | 242 | # endif |
243 | #endif | 243 | #endif |
244 | 244 | ||
245 | /* Size-saving "small" ints (arch-dependent) */ | 245 | /* Size-saving "small" ints (arch-dependent) */ |
@@ -256,20 +256,20 @@ typedef unsigned smalluint; | |||
256 | /* ISO C Standard: 7.16 Boolean type and values <stdbool.h> */ | 256 | /* ISO C Standard: 7.16 Boolean type and values <stdbool.h> */ |
257 | #if (defined __digital__ && defined __unix__) | 257 | #if (defined __digital__ && defined __unix__) |
258 | /* old system without (proper) C99 support */ | 258 | /* old system without (proper) C99 support */ |
259 | #define bool smalluint | 259 | # define bool smalluint |
260 | #else | 260 | #else |
261 | /* modern system, so use it */ | 261 | /* modern system, so use it */ |
262 | #include <stdbool.h> | 262 | # include <stdbool.h> |
263 | #endif | 263 | #endif |
264 | 264 | ||
265 | /* Try to defeat gcc's alignment of "char message[]"-like data */ | 265 | /* Try to defeat gcc's alignment of "char message[]"-like data */ |
266 | #if 1 /* if needed: !defined(arch1) && !defined(arch2) */ | 266 | #if 1 /* if needed: !defined(arch1) && !defined(arch2) */ |
267 | #define ALIGN1 __attribute__((aligned(1))) | 267 | # define ALIGN1 __attribute__((aligned(1))) |
268 | #define ALIGN2 __attribute__((aligned(2))) | 268 | # define ALIGN2 __attribute__((aligned(2))) |
269 | #else | 269 | #else |
270 | /* Arches which MUST have 2 or 4 byte alignment for everything are here */ | 270 | /* Arches which MUST have 2 or 4 byte alignment for everything are here */ |
271 | #define ALIGN1 | 271 | # define ALIGN1 |
272 | #define ALIGN2 | 272 | # define ALIGN2 |
273 | #endif | 273 | #endif |
274 | 274 | ||
275 | 275 | ||
@@ -281,13 +281,13 @@ typedef unsigned smalluint; | |||
281 | #if ENABLE_NOMMU || \ | 281 | #if ENABLE_NOMMU || \ |
282 | (defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ | 282 | (defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ |
283 | __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__) | 283 | __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__) |
284 | #define BB_MMU 0 | 284 | # define BB_MMU 0 |
285 | #define USE_FOR_NOMMU(...) __VA_ARGS__ | 285 | # define USE_FOR_NOMMU(...) __VA_ARGS__ |
286 | #define USE_FOR_MMU(...) | 286 | # define USE_FOR_MMU(...) |
287 | #else | 287 | #else |
288 | #define BB_MMU 1 | 288 | # define BB_MMU 1 |
289 | #define USE_FOR_NOMMU(...) | 289 | # define USE_FOR_NOMMU(...) |
290 | #define USE_FOR_MMU(...) __VA_ARGS__ | 290 | # define USE_FOR_MMU(...) __VA_ARGS__ |
291 | #endif | 291 | #endif |
292 | 292 | ||
293 | /* Platforms that haven't got dprintf need to implement fdprintf() in | 293 | /* Platforms that haven't got dprintf need to implement fdprintf() in |
@@ -297,7 +297,7 @@ typedef unsigned smalluint; | |||
297 | /* Needed for: glibc */ | 297 | /* Needed for: glibc */ |
298 | /* Not needed for: dietlibc */ | 298 | /* Not needed for: dietlibc */ |
299 | /* Others: ?? (add as needed) */ | 299 | /* Others: ?? (add as needed) */ |
300 | #define fdprintf dprintf | 300 | # define fdprintf dprintf |
301 | #endif | 301 | #endif |
302 | 302 | ||
303 | #if defined(__dietlibc__) | 303 | #if defined(__dietlibc__) |
@@ -323,7 +323,6 @@ static ALWAYS_INLINE char* strchrnul(const char *s, char c) | |||
323 | # define PRIu32 "u" | 323 | # define PRIu32 "u" |
324 | /* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */ | 324 | /* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */ |
325 | # define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me,__me); } while (0) | 325 | # define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me,__me); } while (0) |
326 | |||
327 | # if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET | 326 | # if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET |
328 | # define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) | 327 | # define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) |
329 | # endif | 328 | # endif |
@@ -344,44 +343,53 @@ static ALWAYS_INLINE char* strchrnul(const char *s, char c) | |||
344 | #endif | 343 | #endif |
345 | 344 | ||
346 | #if defined(__linux__) | 345 | #if defined(__linux__) |
347 | #include <sys/mount.h> | 346 | # include <sys/mount.h> |
348 | /* Make sure we have all the new mount flags we actually try to use. */ | 347 | /* Make sure we have all the new mount flags we actually try to use. */ |
349 | #ifndef MS_BIND | 348 | # ifndef MS_BIND |
350 | #define MS_BIND (1<<12) | 349 | # define MS_BIND (1 << 12) |
351 | #endif | 350 | # endif |
352 | #ifndef MS_MOVE | 351 | # ifndef MS_MOVE |
353 | #define MS_MOVE (1<<13) | 352 | # define MS_MOVE (1 << 13) |
354 | #endif | 353 | # endif |
355 | #ifndef MS_RECURSIVE | 354 | # ifndef MS_RECURSIVE |
356 | #define MS_RECURSIVE (1<<14) | 355 | # define MS_RECURSIVE (1 << 14) |
357 | #endif | 356 | # endif |
358 | #ifndef MS_SILENT | 357 | # ifndef MS_SILENT |
359 | #define MS_SILENT (1<<15) | 358 | # define MS_SILENT (1 << 15) |
360 | #endif | 359 | # endif |
361 | |||
362 | /* The shared subtree stuff, which went in around 2.6.15. */ | 360 | /* The shared subtree stuff, which went in around 2.6.15. */ |
363 | #ifndef MS_UNBINDABLE | 361 | # ifndef MS_UNBINDABLE |
364 | #define MS_UNBINDABLE (1<<17) | 362 | # define MS_UNBINDABLE (1 << 17) |
365 | #endif | 363 | # endif |
366 | #ifndef MS_PRIVATE | 364 | # ifndef MS_PRIVATE |
367 | #define MS_PRIVATE (1<<18) | 365 | # define MS_PRIVATE (1 << 18) |
368 | #endif | 366 | # endif |
369 | #ifndef MS_SLAVE | 367 | # ifndef MS_SLAVE |
370 | #define MS_SLAVE (1<<19) | 368 | # define MS_SLAVE (1 << 19) |
371 | #endif | 369 | # endif |
372 | #ifndef MS_SHARED | 370 | # ifndef MS_SHARED |
373 | #define MS_SHARED (1<<20) | 371 | # define MS_SHARED (1 << 20) |
374 | #endif | 372 | # endif |
375 | #ifndef MS_RELATIME | 373 | # ifndef MS_RELATIME |
376 | #define MS_RELATIME (1 << 21) | 374 | # define MS_RELATIME (1 << 21) |
377 | #endif | 375 | # endif |
378 | 376 | ||
379 | #if !defined(BLKSSZGET) | 377 | # if !defined(BLKSSZGET) |
380 | #define BLKSSZGET _IO(0x12, 104) | 378 | # define BLKSSZGET _IO(0x12, 104) |
379 | # endif | ||
380 | # if !defined(BLKGETSIZE64) | ||
381 | # define BLKGETSIZE64 _IOR(0x12,114,size_t) | ||
382 | # endif | ||
381 | #endif | 383 | #endif |
382 | #if !defined(BLKGETSIZE64) | 384 | |
383 | #define BLKGETSIZE64 _IOR(0x12,114,size_t) | 385 | /* The field domainname of struct utsname is Linux specific. */ |
386 | #if !defined(__linux__) | ||
387 | # define HAVE_NO_UTSNAME_DOMAINNAME | ||
384 | #endif | 388 | #endif |
389 | |||
390 | /* If this system doesn't have IUCLC bit in struct termios::c_iflag... */ | ||
391 | #ifndef IUCLC | ||
392 | # define IUCLC 0 | ||
385 | #endif | 393 | #endif |
386 | 394 | ||
387 | #endif | 395 | #endif |