X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fplatform.h;h=9d8df4b7f303aac6ca71633fbe3210e786e53cdb;hb=98ee06d3d46aa7f89c204681c7075b53300a6a6e;hp=1effc61c026c67ebb6a0edf4775b559fffe53840;hpb=b16b5bb08f8b2b1d3e5f56c6655ba0332edcdc48;p=oweals%2Fbusybox.git diff --git a/include/platform.h b/include/platform.h index 1effc61c0..9d8df4b7f 100644 --- a/include/platform.h +++ b/include/platform.h @@ -11,7 +11,7 @@ #undef __GNUC_PREREQ #if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) \ - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) #else # define __GNUC_PREREQ(maj, min) 0 #endif @@ -34,7 +34,7 @@ #endif #undef inline -#if __STDC_VERSION__ > 199901L +#if defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L /* it's a keyword */ #else # if __GNUC_PREREQ (2,7) @@ -48,39 +48,23 @@ # define __const const #endif -#ifndef ATTRIBUTE_UNUSED # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -#endif /* ATTRIBUTE_UNUSED */ - -#ifndef ATTRIBUTE_NORETURN # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) -#endif /* ATTRIBUTE_NORETURN */ - -#ifndef ATTRIBUTE_PACKED # define ATTRIBUTE_PACKED __attribute__ ((__packed__)) -#endif /* ATTRIBUTE_PACKED */ - -#ifndef ATTRIBUTE_ALIGNED # define ATTRIBUTE_ALIGNED(m) __attribute__ ((__aligned__(m))) -#endif /* ATTRIBUTE_ALIGNED */ - -#ifndef ATTRIBUTE_ALWAYS_INLINE # if __GNUC_PREREQ (3,0) # define ATTRIBUTE_ALWAYS_INLINE __attribute__ ((always_inline)) inline # else # define ATTRIBUTE_ALWAYS_INLINE inline # endif -#endif /* -fwhole-program makes all symbols local. The attribute externally_visible forces a symbol global. */ -#ifndef ATTRIBUTE_EXTERNALLY_VISIBLE # if __GNUC_PREREQ (4,1) # define ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((__externally_visible__)) # else # define ATTRIBUTE_EXTERNALLY_VISIBLE # endif /* GNUC >= 4.1 */ -#endif /* ATTRIBUTE_EXTERNALLY_VISIBLE */ /* We use __extension__ in some places to suppress -pedantic warnings about GCC extensions. This feature didn't work properly before @@ -91,6 +75,14 @@ # endif #endif +/* gcc-2.95 had no va_copy but only __va_copy. */ +#if !__GNUC_PREREQ (3,0) +# include +# if !defined va_copy && defined __va_copy +# define va_copy(d,s) __va_copy((d),(s)) +# endif +#endif + /* ---- Endian Detection ------------------------------------ */ #if (defined __digital__ && defined __unix__) @@ -141,18 +133,16 @@ typedef int socklen_t; #endif /* ---- Compiler dependent settings ------------------------- */ -#ifndef __GNUC__ -#if defined __INTEL_COMPILER -__extension__ typedef __signed__ long long __s64; -__extension__ typedef unsigned long long __u64; -#endif /* __INTEL_COMPILER */ -#endif /* ifndef __GNUC__ */ +//#ifndef __GNUC__ +//#if defined __INTEL_COMPILER +//__extension__ typedef __signed__ long long __s64; +//__extension__ typedef unsigned long long __u64; +//#endif /* __INTEL_COMPILER */ +//#endif /* ifndef __GNUC__ */ #if (defined __digital__ && defined __unix__) -# undef HAVE_STDBOOL_H # undef HAVE_MNTENT_H #else -# define HAVE_STDBOOL_H 1 # define HAVE_MNTENT_H 1 #endif /* ___digital__ && __unix__ */ @@ -168,6 +158,8 @@ __extension__ typedef unsigned long long __u64; # error "Sorry, this libc version is not supported :(" #endif +// Don't perpetuate e2fsck crap into the headers. Clean up e2fsck instead. + #if defined __GLIBC__ || defined __UCLIBC__ \ || defined __dietlibc__ || defined _NEWLIB_VERSION #include @@ -187,18 +179,10 @@ typedef unsigned long long int uintmax_t; #endif #endif -#if (defined __digital__ && defined __unix__) -#include -#define HAVE_STANDARDS_H -#include -#define HAVE_INTTYPES_H -#define PRIu32 "u" -#endif - -/* uclibc does not implement daemon for no-mmu systems. +/* uclibc does not implement daemon() for no-mmu systems. * For 0.9.29 and svn, __ARCH_USE_MMU__ indicates no-mmu reliably. * For earlier versions there is no reliable way to check if we are building - * for a mmu-less system; the user should pass CFLAGS_EXTRA="-DBB_NOMMU" + * for a mmu-less system; the user should pass EXTRA_CFLAGS="-DBB_NOMMU" * on his own. */ #if defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ @@ -206,9 +190,28 @@ typedef unsigned long long int uintmax_t; #define BB_NOMMU #endif -/* Need to implement fdprintf for platforms that haven't got dprintf. */ -/* THIS SHOULD BE CLEANED OUT OF THE TREE ENTIRELY */ +/* Platforms that haven't got dprintf need to implement fdprintf() in + * libbb. This would require a platform.c. It's not going to be cleaned + * out of the tree, so stop saying it should be. */ +#if !defined(__dietlibc__) +/* Needed for: glibc */ +/* Not needed for: dietlibc */ +/* Others: ?? (add as needed) */ #define fdprintf dprintf +#endif + +#if defined(__dietlibc__) +static ATTRIBUTE_ALWAYS_INLINE char* strchrnul(const char *s, char c) { + while (*s && *s != c) ++s; + return (char*)s; +} +#endif + +/* Don't use lchown with glibc older than 2.1.x ... uC-libc lacks it */ +#if (defined __GLIBC__ && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1) || \ + defined __UC_LIBC__ +# define lchown chown +#endif /* THIS SHOULD BE CLEANED OUT OF THE TREE ENTIRELY */ /* FIXME: fix tar.c! */ @@ -216,15 +219,16 @@ typedef unsigned long long int uintmax_t; #define FNM_LEADING_DIR 0 #endif -/* move to platform.c */ #if (defined __digital__ && defined __unix__) -/* use legacy setpgrp(pidt_,pid_t) for now.. */ -#define bb_setpgrp do{pid_t __me = getpid();setpgrp(__me,__me);}while(0) -#else -#define bb_setpgrp setpgrp() -#endif +#include +#define HAVE_STANDARDS_H +#include +#define HAVE_INTTYPES_H +#define PRIu32 "u" + +/* use legacy setpgrp(pidt_,pid_t) for now. move to platform.c */ +#define bb_setpgrp do { pid_t __me = getpid(); setpgrp(__me,__me); } while (0) -/* This is needed on some non linux unices like Tru64 */ #if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET #define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) #endif @@ -238,4 +242,47 @@ typedef unsigned long long int uintmax_t; #define ADJ_TICK MOD_CLKB #endif +#else +#define bb_setpgrp setpgrp() +#endif + +#if defined(__linux__) +#include +// Make sure we have all the new mount flags we actually try to use. +#ifndef MS_BIND +#define MS_BIND (1<<12) +#endif +#ifndef MS_MOVE +#define MS_MOVE (1<<13) +#endif +#ifndef MS_RECURSIVE +#define MS_RECURSIVE (1<<14) +#endif +#ifndef MS_SILENT +#define MS_SILENT (1<<15) +#endif + +// The shared subtree stuff, which went in around 2.6.15 +#ifndef MS_UNBINDABLE +#define MS_UNBINDABLE (1<<17) +#endif +#ifndef MS_PRIVATE +#define MS_PRIVATE (1<<18) +#endif +#ifndef MS_SLAVE +#define MS_SLAVE (1<<19) +#endif +#ifndef MS_SHARED +#define MS_SHARED (1<<20) +#endif + + +#if !defined(BLKSSZGET) +#define BLKSSZGET _IO(0x12, 104) +#endif +#if !defined(BLKGETSIZE64) +#define BLKGETSIZE64 _IOR(0x12,114,size_t) +#endif +#endif + #endif /* platform.h */