From 4e79810a727d810b977dfeffb3ba654447a0b1fe Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 13 Nov 2012 06:32:03 -0600 Subject: Older versions of glibc predated posix-2008. They still provide most of what we need, but require a boot to the headers to get them to admit it. Note that uClibc lies and claims to be glibc so we have to specifically exclude it here. --- lib/portability.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/portability.h b/lib/portability.h index 92d8f96f..33e2672f 100644 --- a/lib/portability.h +++ b/lib/portability.h @@ -1,3 +1,8 @@ +// Workarounds for horrible build environment idiosyncrasies. +// Instead of polluting the code with strange #ifdefs to work around bugs +// in specific compiler, library, or OS versions, localize all that here +// and in portability.c + // The tendency of gcc to produce stupid warnings continues with // warn_unused_result, which warns about things like ignoring the return code // of nice(2) (which is completely useless since -1 is a legitimate return @@ -7,6 +12,7 @@ #undef _FORTIFY_SOURCE +// Always use long file support. #define _FILE_OFFSET_BITS 64 // This isn't in the spec, but it's how we determine what we're using. @@ -21,6 +27,30 @@ char *strptime(const char *buf, const char *format, struct tm *tm); // Another one. "Function prototypes shall be provided." but aren't. // http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html char *crypt(const char *key, const char *salt); + +// When building under obsolete glibc, hold its hand a bit. + +#if __GLIBC_MINOR__ < 10 && !defined(__UCLIBC__) +#define AT_FDCWD -100 +#define AT_SYMLINK_NOFOLLOW 0x100 +#define AT_REMOVEDIR 0x200 +int fstatat(int dirfd, const char *pathname, void *buf, int flags); +int readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz); +char *stpcpy(char *dest, const char *src); +#include +int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags); +int openat(int dirfd, const char *pathname, int flags, ...); +#include +DIR *fdopendir(int fd); +#include +int fchownat(int dirfd, const char *pathname, + uid_t owner, gid_t group, int flags); +int isblank(int c); +int unlinkat(int dirfd, const char *pathname, int flags); +#include +ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream); +#endif + #endif #ifdef __GNUC__ -- cgit v1.2.3