#ifndef _FEATURES_H #define _FEATURES_H #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) #define _GNU_SOURCE 1 #endif #if defined(_DEFAULT_SOURCE) && !defined(_BSD_SOURCE) #define _BSD_SOURCE 1 #endif #if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) \ && !defined(_XOPEN_SOURCE) && !defined(_GNU_SOURCE) \ && !defined(_BSD_SOURCE) && !defined(__STRICT_ANSI__) #define _BSD_SOURCE 1 #define _XOPEN_SOURCE 700 #endif #if defined(__EMSCRIPTEN__) && defined(_GNU_SOURCE) // In emscripten the LFS functions are kept around when _GNU_SOURCE is // defined, for increased compatabiliy. This is also what glibc does. #undef _LARGEFILE64_SOURCE #define _LARGEFILE64_SOURCE 1 #endif #if __STDC_VERSION__ >= 199901L #define __restrict restrict #elif !defined(__GNUC__) #define __restrict #endif #if __STDC_VERSION__ >= 199901L || defined(__cplusplus) #define __inline inline #elif !defined(__GNUC__) #define __inline #endif #if __STDC_VERSION__ >= 201112L #elif defined(__GNUC__) #define _Noreturn __attribute__((__noreturn__)) #else #define _Noreturn #endif #define __REDIR(x,y) __typeof__(x) x __asm__(#y) #endif