diff --git a/include/features.h b/include/features.h index 2e16874792..a34e26f52c 100644 --- a/include/features.h +++ b/include/features.h @@ -277,6 +277,14 @@ #define __GLIBC_PREREQ(maj, min) \ ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min)) +/* Decide whether a compiler supports the long long datatypes. */ +#if defined __GNUC__ \ + || (defined __PGI && defined __i386__ ) \ + || (defined __INTEL_COMPILER && (defined __i386__ || defined __ia64__)) \ + || (defined __STDC_VERSION && __STDC_VERSION >= 199901L) +# define __GLIBC_HAVE_LONG_LONG 1 +#endif + /* This is here only because every header file already includes this one. */ #ifndef __ASSEMBLER__ # ifndef _SYS_CDEFS_H diff --git a/posix/sys/types.h b/posix/sys/types.h index cd114876fe..6895c0dec0 100644 --- a/posix/sys/types.h +++ b/posix/sys/types.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,92,94,95,96,97,98,99,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -162,7 +162,7 @@ typedef unsigned int uint; typedef char int8_t; typedef short int int16_t; typedef int int32_t; -# ifdef __GNUC__ +# if __GLIBC_HAVE_LONG_LONG __extension__ typedef long long int int64_t; # endif # endif @@ -171,7 +171,7 @@ __extension__ typedef long long int int64_t; typedef unsigned char u_int8_t; typedef unsigned short int u_int16_t; typedef unsigned int u_int32_t; -# ifdef __GNUC__ +# if __GLIBC_HAVE_LONG_LONG __extension__ typedef unsigned long long int u_int64_t; # endif diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index 74082c485d..9b0ed9e3a6 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -140,7 +140,7 @@ extern int atoi (__const char *__nptr) __THROW __attribute_pure__; /* Convert a string to a long integer. */ extern long int atol (__const char *__nptr) __THROW __attribute_pure__; -#if defined __USE_ISOC99 || (defined __GNUC__ && defined __USE_MISC) +#if defined __USE_ISOC99 || (defined __GLIBC_HAVE_LONG_LONG && defined __USE_MISC) /* Convert a string to a long long integer. */ __extension__ extern long long int atoll (__const char *__nptr) __THROW __attribute_pure__; @@ -167,7 +167,7 @@ extern unsigned long int strtoul (__const char *__restrict __nptr, char **__restrict __endptr, int __base) __THROW; -#if defined __GNUC__ && defined __USE_BSD +#if defined __GLIBC_HAVE_LONG_LONG && defined __USE_BSD /* Convert a string to a quadword integer. */ __extension__ extern long long int strtoq (__const char *__restrict __nptr, @@ -179,7 +179,7 @@ extern unsigned long long int strtouq (__const char *__restrict __nptr, __THROW; #endif /* GCC and use BSD. */ -#if defined __USE_ISOC99 || (defined __GNUC__ && defined __USE_MISC) +#if defined __USE_ISOC99 || (defined __GLIBC_HAVE_LONG_LONG && defined __USE_MISC) /* These functions will part of the standard C library in ISO C99. */ /* Convert a string to a quadword integer. */ diff --git a/sysdeps/unix/sysv/linux/bits/types.h b/sysdeps/unix/sysv/linux/bits/types.h index bdda9388ac..ffc346fc75 100644 --- a/sysdeps/unix/sysv/linux/bits/types.h +++ b/sysdeps/unix/sysv/linux/bits/types.h @@ -33,7 +33,7 @@ typedef unsigned char __u_char; typedef unsigned short __u_short; typedef unsigned int __u_int; typedef unsigned long __u_long; -#ifdef __GNUC__ +#ifdef __GLIBC_HAVE_LONG_LONG __extension__ typedef unsigned long long int __u_quad_t; __extension__ typedef long long int __quad_t; #else @@ -52,7 +52,7 @@ typedef signed short int __int16_t; typedef unsigned short int __uint16_t; typedef signed int __int32_t; typedef unsigned int __uint32_t; -#ifdef __GNUC__ +#ifdef __GLIBC_HAVE_LONG_LONG __extension__ typedef signed long long int __int64_t; __extension__ typedef unsigned long long int __uint64_t; #endif @@ -63,7 +63,7 @@ typedef __u_int __uid_t; /* Type of user identifications. */ typedef __u_int __gid_t; /* Type of group identifications. */ typedef __u_long __ino_t; /* Type of file serial numbers. */ typedef __u_int __mode_t; /* Type of file attribute bitmasks. */ -typedef __u_int __nlink_t; /* Type of file link counts. */ +typedef __u_int __nlink_t; /* Type of file link counts. */ typedef long int __off_t; /* Type of file sizes and offsets. */ typedef __quad_t __loff_t; /* Type of file sizes and offsets. */ typedef int __pid_t; /* Type of process identifications. */