From 3f80afc50577dada3940b66ef5b67da2f43cc00a Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Wed, 15 Aug 2012 15:35:32 -0400 Subject: [PATCH] improve headers to better deal with removed-in-posix-2008 features with this patch, setting _POSIX_SOURCE, or setting _POSIX_C_SOURCE or _XOPEN_SOURCE to an old version, will bring back the interfaces that were removed in POSIX 2008 - at least the ones i've covered so far, which are gethostby*, usleep, and ualarm. if there are other functions still in widespread use that were removed for which similar changes would be beneficial, they can be added just like this. --- include/netdb.h | 27 ++++++++++++++++----------- include/unistd.h | 8 ++++++-- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/include/netdb.h b/include/netdb.h index 82c78dc8..42a4b682 100644 --- a/include/netdb.h +++ b/include/netdb.h @@ -118,21 +118,30 @@ struct protoent *getprotoent (void); struct protoent *getprotobyname (const char *); struct protoent *getprotobynumber (int); +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ + || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE < 200809L) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE < 700) +struct hostent *gethostbyname (const char *); +struct hostent *gethostbyaddr (const void *, socklen_t, int); +#ifdef __GNUC__ +__attribute__((const)) +#endif +int *__h_errno_location(void); +#define h_errno (*__h_errno_location()) +#define HOST_NOT_FOUND 1 +#define TRY_AGAIN 2 +#define NO_RECOVERY 3 +#define NO_DATA 4 +#endif + #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) const char *hstrerror(int); -struct hostent *gethostbyname (const char *); int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *); int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *); struct hostent *gethostbyname2(const char *, int); -struct hostent *gethostbyaddr (const void *, socklen_t, int); int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *); int getservbyport_r(int, const char *, struct servent *, char *, size_t, struct servent **); int getservbyname_r(const char *, const char *, struct servent *, char *, size_t, struct servent **); -#ifdef __GNUC__ -__attribute__((const)) -#endif -int *__h_errno_location(void); -#define h_errno (*__h_errno_location()) #define EAI_NODATA -5 #define EAI_ADDRFAMILY -9 #define EAI_INPROGRESS -100 @@ -143,10 +152,6 @@ int *__h_errno_location(void); #define EAI_IDN_ENCODE -105 #define NI_MAXHOST 255 #define NI_MAXSERV 32 -#define HOST_NOT_FOUND 1 -#define TRY_AGAIN 2 -#define NO_RECOVERY 3 -#define NO_DATA 4 #endif diff --git a/include/unistd.h b/include/unistd.h index 17fe5e7c..12d153b8 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -144,6 +144,12 @@ void encrypt(char *, int); void swab(const void *, void *, ssize_t); #endif +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE < 700) +int usleep(unsigned); +unsigned ualarm(unsigned, unsigned); +#endif + #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define L_SET 0 #define L_INCR 1 @@ -157,8 +163,6 @@ int getpagesize(void); int getdtablesize(void); int sethostname(const char *, size_t); int getdomainname(char *, size_t); -int usleep(unsigned); -unsigned ualarm(unsigned, unsigned); int setgroups(size_t, const gid_t []); char *getpass(const char *); int daemon(int, int); -- GitLab