On 17/10/10 20:58, Bruno Haible wrote: > +/* When, on glibc systems, -D_FORTIFY_SOURCE=1 or -D_FORTIFY_SOURCE=2 is > used, > + enable extra bounds checking, based on the object bounds analysis done by > + GCC. > + The user can disable this bounds checking by defining _GL_NO_FORTIFY. > + __attribute__ __warning__ requires GCC >= 4.3. > + __builtin_object_size requires GCC >= 4.1. > + __always_inline__ requires GCC >= 3.2. */ > +#if __USE_FORTIFY_LEVEL > 0 && !defined _GL_NO_FORTIFY && __GNUC_PREREQ (4, > 3)
How about adding support for older compilers as follows. This might also be a stepping stone for people trying to understand the more thorough version? cheers, Pádraig. #if __USE_FORTIFY_LEVEL > 0 && !defined _GL_NO_FORTIFY #if __GNUC_PREREQ (4, 3) [do thorough checks] /* __builtin_constant_p is available since gcc 2.95 */ #elif __GNUC_PREREQ (2, 95) /* Like sizeof, except that it treats a variable sized array as a pointer rather than determining the size at runtime. */ #define CT_SIZEOF(x) (__builtin_constant_p(sizeof x) ? sizeof x: sizeof (void*)) # define imaxtostr(n, s) \ ((void) verify_true (CT_SIZEOF (s) == sizeof (void *) \ || INT_BUFSIZE_BOUND (intmax_t) <= CT_SIZEOF (s)), \ (imaxtostr) (n, s)) ... #endif