* misc/sys/cdefs.h (__va_arg_pack): Define for GCC 4.3+.
* misc/bits/syslog.h (syslog): When __va_arg_pack is defined, implement as __extern_always_inline function. (vsyslog): Define as __extern_always_inline function unconditionally. * libio/bits/stdio2.h (sprintf, snprintf, printf, fprintf): When __va_arg_pack is defined, implement as __extern_always_inline functions. (vsprintf, vsnprintf, vprintf, vfprintf): Define as __extern_always_inline functions unconditionally. * libio/bits/stdio.h (vprintf): Ifdef out the inline when bits/stdio2.h will be included. * wcsmbs/bits/wchar2.h (__swprintf_alias): New redirect. (swprintf, wprintf, fwprintf): When __va_arg_pack is defined, implement as __extern_always_inline functions. (vswprintf, vwprintf, vfwprintf): Define as __extern_always_inline functions unconditionally. * debug/tst-chk1.c (do_test): Enable remaining tests for C++. 2007-09-03 Jakub Jelinek <jakub@redhat.com> * misc/sys/cdefs.h (__extern_inline, __extern_always_inline): Only define in C++ for GCC 4.3+, in C++ always use __gnu_inline__ attribute. * include/features.h (__USE_EXTERN_INLINES): Define only when __extern_inline is defined. * stdlib/stdlib.h: Include bits/stdlib.h when __extern_always_inline is defined instead of when not __cplusplus. * misc/sys/syslog.h: Include bits/syslog.h when __extern_always_inline is defined instead of when not __cplusplus. * socket/sys/socket.h: Include bits/socket2.h when __extern_always_inline is defined instead of when not __cplusplus. * libio/stdio.h: Include bits/stdio2.h when __extern_always_inline is defined instead of when not __cplusplus. * posix/unistd.h: Include bits/unistd.h when __extern_always_inline is defined instead of when not __cplusplus. * string/string.h: Include bits/string3.h when __extern_always_inline is defined instead of when not __cplusplus. * wcsmbs/wchar.h: Include bits/wchar2.h when __extern_always_inline is defined instead of when not __cplusplus. (btowc, wctob): Don't guard the inlines with ifndef __cplusplus. * io/fcntl.h: Don't include bits/fcntl2.h if __extern_always_inline is not defined. * misc/bits/syslog-ldbl.h: Guard *_chk stuff with defined __extern_always_inline instead of !defined __cplusplus. * libio/bits/stdio-ldbl.h: Likewise. * wcsmbs/bits/wchar-ldbl.h: Likewise. * misc/bits/syslog.h (syslog): Don't define for C++. (vsyslog): Use __extern_always_inline function for C++ instead of a macro. * libio/bits/stdio.h (__STDIO_INLINE): Define to __extern_inline whenever that macro is defined. (vprintf): Don't provide the inline for C++. (fread_unlocked, fwrite_unlocked): Don't define the macros for C++. * libio/bits/stdio2.h (sprintf, snprintf, printf, fprintf): Don't define the macros for C++. (vsprintf, vsnprintf, vprintf, vfprintf): Define as __extern_always_inline functions for C++. * io/sys/stat.h (stat, lstat, fstat, fstatat, mknod, mknodat, stat64, lstat64, fstat64, fstatat64): Don't define if not __USE_EXTERN_INLINES. * wcsmbs/bits/wchar2.h: Fix #error message. (swprintf, wprintf, fwprintf): Don't define the macros for C++. (vswprintf, vwprintf, vfwprintf): Define using __extern_always_inline functions for C++. * string/bits/string3.h: Don't #undef macros if __cplusplus. (memcpy, memmove, mempcpy, memset, bcopy, bzero, strcpy, stpcpy, strncpy, strcat, strncat): Define as __extern_always_inline functions instead of macros for C++. * math/bits/cmathcalls.h: Guard __extern_inline routines with defined __extern_inline. * sysdeps/alpha/fpu/bits/mathinline.h (__MATH_INLINE): Define to __extern_inline whenever that macro is defined. * sysdeps/ia64/fpu/bits/mathinline.h (__MATH_INLINE): Likewise. * sysdeps/i386/fpu/bits/mathinline.h (__MATH_INLINE): Likewise. * sysdeps/i386/i486/bits/string.h (__STRING_INLINE): Likewise. * sysdeps/s390/bits/string.h (__STRING_INLINE): Likewise. * sysdeps/s390/fpu/bits/mathinline.h (__MATH_INLINE): Likewise. * sysdeps/powerpc/fpu/bits/mathinline.h (__MATH_INLINE): Likewise. * sysdeps/x86_64/fpu/bits/mathinline.h (__MATH_INLINE): Likewise. * sysdeps/sparc/fpu/bits/mathinline.h (__MATH_INLINE): Likewise. * sysdeps/unix/sysv/linux/sys/sysmacros.h (gnu_dev_major, gnu_dev_minor, gnu_dev_makedev): Remove __extern_inline from prototypes. Only provide __extern_inline routines if __USE_EXTERN_INLINES. * debug/Makefile: Add rules to build and run tst-{,lfs}chk{4,5,6} tests. * debug/tst-chk1.c (do_prepare, do_test): Allow compilation as C++. For now avoid some *printf tests in C++. Skip all testing if __USE_FORTIFY_LEVEL is defined, but __extern_always_inline macro is not. * debug/tst-chk4.cc: New file. * debug/tst-chk5.cc: New file. * debug/tst-chk6.cc: New file. * debug/tst-lfschk4.cc: New file. * debug/tst-lfschk5.cc: New file. * debug/tst-lfschk6.cc: New file. * include/wchar.h (__vfwprintf_chk, __vswprintf_chk): Avoid prototypes in C++. * include/stdio.h (__sprintf_chk, __snprintf_chk, __vsprintf_chk, __vsnprintf_chk, __printf_chk, __fprintf_chk, __vprintf_chk, __vfprintf_chk, __fgets_unlocked_chk, __fgets_chk): Likewise.
This commit is contained in:
parent
b53eef9c02
commit
de1c3ebb59
104
ChangeLog
104
ChangeLog
@ -1,3 +1,107 @@
|
||||
2007-09-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* misc/sys/cdefs.h (__va_arg_pack): Define for GCC 4.3+.
|
||||
* misc/bits/syslog.h (syslog): When __va_arg_pack is defined,
|
||||
implement as __extern_always_inline function.
|
||||
(vsyslog): Define as __extern_always_inline function unconditionally.
|
||||
* libio/bits/stdio2.h (sprintf, snprintf, printf, fprintf):
|
||||
When __va_arg_pack is defined, implement as __extern_always_inline
|
||||
functions.
|
||||
(vsprintf, vsnprintf, vprintf, vfprintf): Define as
|
||||
__extern_always_inline functions unconditionally.
|
||||
* libio/bits/stdio.h (vprintf): Ifdef out the inline when
|
||||
bits/stdio2.h will be included.
|
||||
* wcsmbs/bits/wchar2.h (__swprintf_alias): New redirect.
|
||||
(swprintf, wprintf, fwprintf): When __va_arg_pack is defined,
|
||||
implement as __extern_always_inline functions.
|
||||
(vswprintf, vwprintf, vfwprintf): Define as
|
||||
__extern_always_inline functions unconditionally.
|
||||
* debug/tst-chk1.c (do_test): Enable remaining tests for C++.
|
||||
|
||||
2007-09-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* misc/sys/cdefs.h (__extern_inline, __extern_always_inline): Only
|
||||
define in C++ for GCC 4.3+, in C++ always use __gnu_inline__
|
||||
attribute.
|
||||
* include/features.h (__USE_EXTERN_INLINES): Define only when
|
||||
__extern_inline is defined.
|
||||
* stdlib/stdlib.h: Include bits/stdlib.h when __extern_always_inline
|
||||
is defined instead of when not __cplusplus.
|
||||
* misc/sys/syslog.h: Include bits/syslog.h when __extern_always_inline
|
||||
is defined instead of when not __cplusplus.
|
||||
* socket/sys/socket.h: Include bits/socket2.h when
|
||||
__extern_always_inline is defined instead of when not __cplusplus.
|
||||
* libio/stdio.h: Include bits/stdio2.h when __extern_always_inline
|
||||
is defined instead of when not __cplusplus.
|
||||
* posix/unistd.h: Include bits/unistd.h when __extern_always_inline
|
||||
is defined instead of when not __cplusplus.
|
||||
* string/string.h: Include bits/string3.h when __extern_always_inline
|
||||
is defined instead of when not __cplusplus.
|
||||
* wcsmbs/wchar.h: Include bits/wchar2.h when __extern_always_inline
|
||||
is defined instead of when not __cplusplus.
|
||||
(btowc, wctob): Don't guard the inlines with ifndef __cplusplus.
|
||||
* io/fcntl.h: Don't include bits/fcntl2.h if __extern_always_inline
|
||||
is not defined.
|
||||
* misc/bits/syslog-ldbl.h: Guard *_chk stuff with
|
||||
defined __extern_always_inline instead of !defined __cplusplus.
|
||||
* libio/bits/stdio-ldbl.h: Likewise.
|
||||
* wcsmbs/bits/wchar-ldbl.h: Likewise.
|
||||
* misc/bits/syslog.h (syslog): Don't define for C++.
|
||||
(vsyslog): Use __extern_always_inline function for C++ instead of
|
||||
a macro.
|
||||
* libio/bits/stdio.h (__STDIO_INLINE): Define to __extern_inline
|
||||
whenever that macro is defined.
|
||||
(vprintf): Don't provide the inline for C++.
|
||||
(fread_unlocked, fwrite_unlocked): Don't define the macros for C++.
|
||||
* libio/bits/stdio2.h (sprintf, snprintf, printf, fprintf): Don't
|
||||
define the macros for C++.
|
||||
(vsprintf, vsnprintf, vprintf, vfprintf): Define as
|
||||
__extern_always_inline functions for C++.
|
||||
* io/sys/stat.h (stat, lstat, fstat, fstatat, mknod, mknodat,
|
||||
stat64, lstat64, fstat64, fstatat64): Don't define if not
|
||||
__USE_EXTERN_INLINES.
|
||||
* wcsmbs/bits/wchar2.h: Fix #error message.
|
||||
(swprintf, wprintf, fwprintf): Don't define the macros for C++.
|
||||
(vswprintf, vwprintf, vfwprintf): Define using
|
||||
__extern_always_inline functions for C++.
|
||||
* string/bits/string3.h: Don't #undef macros if __cplusplus.
|
||||
(memcpy, memmove, mempcpy, memset, bcopy, bzero, strcpy, stpcpy,
|
||||
strncpy, strcat, strncat): Define as __extern_always_inline
|
||||
functions instead of macros for C++.
|
||||
* math/bits/cmathcalls.h: Guard __extern_inline routines with
|
||||
defined __extern_inline.
|
||||
* sysdeps/alpha/fpu/bits/mathinline.h (__MATH_INLINE): Define
|
||||
to __extern_inline whenever that macro is defined.
|
||||
* sysdeps/ia64/fpu/bits/mathinline.h (__MATH_INLINE): Likewise.
|
||||
* sysdeps/i386/fpu/bits/mathinline.h (__MATH_INLINE): Likewise.
|
||||
* sysdeps/i386/i486/bits/string.h (__STRING_INLINE): Likewise.
|
||||
* sysdeps/s390/bits/string.h (__STRING_INLINE): Likewise.
|
||||
* sysdeps/s390/fpu/bits/mathinline.h (__MATH_INLINE): Likewise.
|
||||
* sysdeps/powerpc/fpu/bits/mathinline.h (__MATH_INLINE): Likewise.
|
||||
* sysdeps/x86_64/fpu/bits/mathinline.h (__MATH_INLINE): Likewise.
|
||||
* sysdeps/sparc/fpu/bits/mathinline.h (__MATH_INLINE): Likewise.
|
||||
* sysdeps/unix/sysv/linux/sys/sysmacros.h (gnu_dev_major,
|
||||
gnu_dev_minor, gnu_dev_makedev): Remove __extern_inline from
|
||||
prototypes. Only provide __extern_inline routines if
|
||||
__USE_EXTERN_INLINES.
|
||||
* debug/Makefile: Add rules to build and run tst-{,lfs}chk{4,5,6}
|
||||
tests.
|
||||
* debug/tst-chk1.c (do_prepare, do_test): Allow compilation as C++.
|
||||
For now avoid some *printf tests in C++. Skip all testing
|
||||
if __USE_FORTIFY_LEVEL is defined, but __extern_always_inline macro
|
||||
is not.
|
||||
* debug/tst-chk4.cc: New file.
|
||||
* debug/tst-chk5.cc: New file.
|
||||
* debug/tst-chk6.cc: New file.
|
||||
* debug/tst-lfschk4.cc: New file.
|
||||
* debug/tst-lfschk5.cc: New file.
|
||||
* debug/tst-lfschk6.cc: New file.
|
||||
* include/wchar.h (__vfwprintf_chk, __vswprintf_chk): Avoid
|
||||
prototypes in C++.
|
||||
* include/stdio.h (__sprintf_chk, __snprintf_chk, __vsprintf_chk,
|
||||
__vsnprintf_chk, __printf_chk, __fprintf_chk, __vprintf_chk,
|
||||
__vfprintf_chk, __fgets_unlocked_chk, __fgets_chk): Likewise.
|
||||
|
||||
2007-09-13 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* po/cs.po: Update from translation team.
|
||||
|
@ -79,15 +79,37 @@ CFLAGS-recvfrom_chk.c = -fexceptions -fasynchronous-unwind-tables
|
||||
CFLAGS-tst-chk1.c = -Wno-format
|
||||
CFLAGS-tst-chk2.c = -Wno-format
|
||||
CFLAGS-tst-chk3.c = -Wno-format
|
||||
CFLAGS-tst-chk4.cc = -Wno-format
|
||||
CFLAGS-tst-chk5.cc = -Wno-format
|
||||
CFLAGS-tst-chk6.cc = -Wno-format
|
||||
CFLAGS-tst-lfschk1.c = -Wno-format
|
||||
CFLAGS-tst-lfschk2.c = -Wno-format
|
||||
CFLAGS-tst-lfschk3.c = -Wno-format
|
||||
CFLAGS-tst-lfschk4.cc = -Wno-format
|
||||
CFLAGS-tst-lfschk5.cc = -Wno-format
|
||||
CFLAGS-tst-lfschk6.cc = -Wno-format
|
||||
tst-chk1-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-chk2-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-chk3-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-chk4-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-chk5-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-chk6-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-lfschk1-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-lfschk2-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-lfschk3-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-lfschk4-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-lfschk5-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-lfschk6-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
LDFLAGS-tst-chk4 = -lstdc++
|
||||
LDFLAGS-tst-chk5 = -lstdc++
|
||||
LDFLAGS-tst-chk6 = -lstdc++
|
||||
LDFLAGS-tst-lfschk4 = -lstdc++
|
||||
LDFLAGS-tst-lfschk5 = -lstdc++
|
||||
LDFLAGS-tst-lfschk6 = -lstdc++
|
||||
|
||||
tests = backtrace-tst tst-chk1 tst-chk2 tst-chk3 \
|
||||
tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk
|
||||
tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \
|
||||
tst-chk4 tst-chk5 tst-chk6 tst-lfschk4 tst-lfschk5 tst-lfschk6
|
||||
|
||||
extra-libs = libSegFault libpcprofile
|
||||
extra-libs-others = $(extra-libs)
|
||||
|
@ -49,7 +49,7 @@ do_prepare (void)
|
||||
}
|
||||
|
||||
const char *strs = "abcdefgh\nABCDEFGHI\nabcdefghij\nABCDEFGHIJ";
|
||||
if (write (temp_fd, strs, strlen (strs)) != strlen (strs))
|
||||
if ((size_t) write (temp_fd, strs, strlen (strs)) != strlen (strs))
|
||||
{
|
||||
puts ("could not write test strings into file");
|
||||
unlink (temp_filename);
|
||||
@ -102,7 +102,7 @@ int num2 = 987654;
|
||||
chk_fail_ok = 0; \
|
||||
FAIL (); \
|
||||
}
|
||||
#if __USE_FORTIFY_LEVEL >= 2
|
||||
#if __USE_FORTIFY_LEVEL >= 2 && (!defined __cplusplus || defined __va_arg_pack)
|
||||
#define CHK_FAIL2_START CHK_FAIL_START
|
||||
#define CHK_FAIL2_END CHK_FAIL_END
|
||||
#else
|
||||
@ -142,6 +142,12 @@ do_test (void)
|
||||
#endif
|
||||
);
|
||||
|
||||
#if defined __USE_FORTIFY_LEVEL && !defined __extern_always_inline
|
||||
printf ("Test skipped");
|
||||
if (l0 == 0)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* These ops can be done without runtime checking of object size. */
|
||||
memcpy (buf, "abcdefghij", 10);
|
||||
memmove (buf + 1, buf, 9);
|
||||
@ -280,7 +286,7 @@ do_test (void)
|
||||
CHK_FAIL_END
|
||||
|
||||
CHK_FAIL_START
|
||||
p = mempcpy (buf + 6, "abcde", l0 + 5);
|
||||
p = (char *) mempcpy (buf + 6, "abcde", l0 + 5);
|
||||
CHK_FAIL_END
|
||||
|
||||
CHK_FAIL_START
|
||||
@ -303,6 +309,7 @@ do_test (void)
|
||||
stpncpy (buf + 6, "cd", l0 + 5);
|
||||
CHK_FAIL_END
|
||||
|
||||
# if !defined __cplusplus || defined __va_arg_pack
|
||||
CHK_FAIL_START
|
||||
sprintf (buf + 8, "%d", num1);
|
||||
CHK_FAIL_END
|
||||
@ -310,6 +317,7 @@ do_test (void)
|
||||
CHK_FAIL_START
|
||||
snprintf (buf + 8, l0 + 3, "%d", num2);
|
||||
CHK_FAIL_END
|
||||
# endif
|
||||
|
||||
memcpy (buf, str1 + 2, l0 + 9);
|
||||
CHK_FAIL_START
|
||||
@ -330,18 +338,18 @@ do_test (void)
|
||||
CHK_FAIL_END
|
||||
|
||||
CHK_FAIL_START
|
||||
p = mempcpy (a.buf1 + 6, "abcde", l0 + 5);
|
||||
p = (char *) mempcpy (a.buf1 + 6, "abcde", l0 + 5);
|
||||
CHK_FAIL_END
|
||||
|
||||
CHK_FAIL_START
|
||||
memset (a.buf1 + 9, 'j', l0 + 2);
|
||||
CHK_FAIL_END
|
||||
|
||||
#if __USE_FORTIFY_LEVEL >= 2
|
||||
# define O 0
|
||||
#else
|
||||
# define O 1
|
||||
#endif
|
||||
# if __USE_FORTIFY_LEVEL >= 2
|
||||
# define O 0
|
||||
# else
|
||||
# define O 1
|
||||
# endif
|
||||
|
||||
CHK_FAIL_START
|
||||
strcpy (a.buf1 + (O + 4), str1 + 5);
|
||||
@ -355,6 +363,7 @@ do_test (void)
|
||||
strncpy (a.buf1 + (O + 6), "X", l0 + 4);
|
||||
CHK_FAIL_END
|
||||
|
||||
# if !defined __cplusplus || defined __va_arg_pack
|
||||
CHK_FAIL_START
|
||||
sprintf (a.buf1 + (O + 7), "%d", num1);
|
||||
CHK_FAIL_END
|
||||
@ -362,6 +371,7 @@ do_test (void)
|
||||
CHK_FAIL_START
|
||||
snprintf (a.buf1 + (O + 7), l0 + 3, "%d", num2);
|
||||
CHK_FAIL_END
|
||||
# endif
|
||||
|
||||
memcpy (a.buf1, str1 + (3 - O), l0 + 8 + O);
|
||||
CHK_FAIL_START
|
||||
@ -919,7 +929,8 @@ do_test (void)
|
||||
else
|
||||
{
|
||||
const char *sendstr = "abcdefgh\nABCDEFGH\n0123456789\n";
|
||||
if (send (sp[0], sendstr, strlen (sendstr), 0) != strlen (sendstr))
|
||||
if ((size_t) send (sp[0], sendstr, strlen (sendstr), 0)
|
||||
!= strlen (sendstr))
|
||||
FAIL ();
|
||||
|
||||
char recvbuf[12];
|
||||
@ -951,29 +962,30 @@ do_test (void)
|
||||
struct sockaddr_un sa_un;
|
||||
|
||||
sl = sizeof (sa_un);
|
||||
if (recvfrom (sp[1], recvbuf, sizeof recvbuf, MSG_PEEK, &sa_un, &sl)
|
||||
if (recvfrom (sp[1], recvbuf, sizeof recvbuf, MSG_PEEK,
|
||||
(struct sockaddr *) &sa_un, &sl)
|
||||
!= sizeof recvbuf
|
||||
|| memcmp (recvbuf, sendstr, sizeof recvbuf) != 0)
|
||||
FAIL ();
|
||||
|
||||
sl = sizeof (sa_un);
|
||||
if (recvfrom (sp[1], recvbuf + 6, l0 + sizeof recvbuf - 7, MSG_PEEK,
|
||||
&sa_un, &sl) != sizeof recvbuf - 7
|
||||
(struct sockaddr *) &sa_un, &sl) != sizeof recvbuf - 7
|
||||
|| memcmp (recvbuf + 6, sendstr, sizeof recvbuf - 7) != 0)
|
||||
FAIL ();
|
||||
|
||||
#if __USE_FORTIFY_LEVEL >= 1
|
||||
CHK_FAIL_START
|
||||
sl = sizeof (sa_un);
|
||||
if (recvfrom (sp[1], recvbuf + 1, sizeof recvbuf, MSG_PEEK, &sa_un, &sl)
|
||||
!= sizeof recvbuf)
|
||||
if (recvfrom (sp[1], recvbuf + 1, sizeof recvbuf, MSG_PEEK,
|
||||
(struct sockaddr *) &sa_un, &sl) != sizeof recvbuf)
|
||||
FAIL ();
|
||||
CHK_FAIL_END
|
||||
|
||||
CHK_FAIL_START
|
||||
sl = sizeof (sa_un);
|
||||
if (recvfrom (sp[1], recvbuf + 4, l0 + sizeof recvbuf - 3, MSG_PEEK,
|
||||
&sa_un, &sl) != sizeof recvbuf - 3)
|
||||
(struct sockaddr *) &sa_un, &sl) != sizeof recvbuf - 3)
|
||||
FAIL ();
|
||||
CHK_FAIL_END
|
||||
#endif
|
||||
|
1
debug/tst-chk4.cc
Normal file
1
debug/tst-chk4.cc
Normal file
@ -0,0 +1 @@
|
||||
#include "tst-chk1.c"
|
2
debug/tst-chk5.cc
Normal file
2
debug/tst-chk5.cc
Normal file
@ -0,0 +1,2 @@
|
||||
#define _FORTIFY_SOURCE 1
|
||||
#include "tst-chk1.c"
|
2
debug/tst-chk6.cc
Normal file
2
debug/tst-chk6.cc
Normal file
@ -0,0 +1,2 @@
|
||||
#define _FORTIFY_SOURCE 2
|
||||
#include "tst-chk1.c"
|
2
debug/tst-lfschk4.cc
Normal file
2
debug/tst-lfschk4.cc
Normal file
@ -0,0 +1,2 @@
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
#include "tst-chk1.c"
|
2
debug/tst-lfschk5.cc
Normal file
2
debug/tst-lfschk5.cc
Normal file
@ -0,0 +1,2 @@
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
#include "tst-chk2.c"
|
2
debug/tst-lfschk6.cc
Normal file
2
debug/tst-lfschk6.cc
Normal file
@ -0,0 +1,2 @@
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
#include "tst-chk3.c"
|
@ -341,7 +341,8 @@
|
||||
|
||||
/* Decide whether we can define 'extern inline' functions in headers. */
|
||||
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
|
||||
&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__
|
||||
&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \
|
||||
&& defined __extern_inline
|
||||
# define __USE_EXTERN_INLINES 1
|
||||
#endif
|
||||
|
||||
|
@ -27,6 +27,7 @@ extern int __vsscanf (__const char *__restrict __s,
|
||||
_G_va_list __arg)
|
||||
__attribute__ ((__format__ (__scanf__, 2, 0)));
|
||||
|
||||
#ifndef __cplusplus
|
||||
extern int __sprintf_chk (char *, int, size_t, const char *, ...) __THROW;
|
||||
extern int __snprintf_chk (char *, size_t, int, size_t, const char *, ...)
|
||||
__THROW;
|
||||
@ -40,6 +41,7 @@ extern int __vprintf_chk (int, const char *, _G_va_list);
|
||||
extern int __vfprintf_chk (FILE *, int, const char *, _G_va_list);
|
||||
extern char *__fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp);
|
||||
extern char *__fgets_chk (char *buf, size_t size, int n, FILE *fp);
|
||||
#endif
|
||||
|
||||
/* Prototypes for compatibility functions. */
|
||||
extern FILE *__new_tmpfile (void);
|
||||
|
@ -152,6 +152,7 @@ extern int __vfwprintf (__FILE *__restrict __s,
|
||||
__const wchar_t *__restrict __format,
|
||||
__gnuc_va_list __arg)
|
||||
/* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
|
||||
#ifndef __cplusplus
|
||||
extern int __vfwprintf_chk (FILE *__restrict __s, int __flag,
|
||||
const wchar_t *__restrict __format,
|
||||
__gnuc_va_list __arg)
|
||||
@ -163,6 +164,7 @@ extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
|
||||
/* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
|
||||
libc_hidden_proto (__vfwprintf_chk)
|
||||
libc_hidden_proto (__vswprintf_chk)
|
||||
#endif
|
||||
|
||||
/* Internal functions. */
|
||||
extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
|
||||
|
@ -212,7 +212,8 @@ extern int posix_fallocate64 (int __fd, __off64_t __offset, __off64_t __len);
|
||||
|
||||
|
||||
/* Define some macros helping to catch common problems. */
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline \
|
||||
&& !defined __cplusplus
|
||||
# include <bits/fcntl2.h>
|
||||
#endif
|
||||
|
||||
|
@ -444,7 +444,7 @@ extern int __xmknodat (int __ver, int __fd, __const char *__path,
|
||||
__mode_t __mode, __dev_t *__dev)
|
||||
__THROW __nonnull ((3, 5));
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 2
|
||||
#if defined __GNUC__ && __GNUC__ >= 2 && defined __USE_EXTERN_INLINES
|
||||
/* Inlined versions of the real stat and mknod functions. */
|
||||
|
||||
__extern_inline int
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -mlong-double-64 compatibility mode for stdio functions.
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2006, 2007 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
|
||||
@ -58,7 +58,7 @@ __LDBL_REDIR_DECL (obstack_printf)
|
||||
__LDBL_REDIR_DECL (obstack_vprintf)
|
||||
#endif
|
||||
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
__LDBL_REDIR_DECL (__sprintf_chk)
|
||||
__LDBL_REDIR_DECL (__vsprintf_chk)
|
||||
# if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
|
||||
|
@ -21,7 +21,7 @@
|
||||
# error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __STDIO_INLINE inline
|
||||
#else
|
||||
# define __STDIO_INLINE __extern_inline
|
||||
@ -29,12 +29,16 @@
|
||||
|
||||
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
/* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
|
||||
inline. */
|
||||
# if !(__USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline)
|
||||
/* Write formatted output to stdout from argument list ARG. */
|
||||
__STDIO_INLINE int
|
||||
vprintf (__const char *__restrict __fmt, _G_va_list __arg)
|
||||
{
|
||||
return vfprintf (stdout, __fmt, __arg);
|
||||
}
|
||||
# endif
|
||||
|
||||
/* Read a character from stdin. */
|
||||
__STDIO_INLINE int
|
||||
@ -135,7 +139,8 @@ __NTH (ferror_unlocked (FILE *__stream))
|
||||
#endif /* Use extern inlines. */
|
||||
|
||||
|
||||
#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__
|
||||
#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
|
||||
&& !defined __cplusplus
|
||||
/* Perform some simple optimizations. */
|
||||
# define fread_unlocked(ptr, size, n, stream) \
|
||||
(__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) \
|
||||
|
@ -27,11 +27,26 @@ extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
|
||||
__const char *__restrict __format,
|
||||
_G_va_list __ap) __THROW;
|
||||
|
||||
#define sprintf(str, ...) \
|
||||
#ifdef __va_arg_pack
|
||||
__extern_always_inline int
|
||||
__NTH (sprintf (char *__restrict __s, __const char *__restrict __fmt, ...))
|
||||
{
|
||||
return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __va_arg_pack ());
|
||||
}
|
||||
#elif !defined __cplusplus
|
||||
# define sprintf(str, ...) \
|
||||
__builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), \
|
||||
__VA_ARGS__)
|
||||
#define vsprintf(str, fmt, ap) \
|
||||
__builtin___vsprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), fmt, ap)
|
||||
#endif
|
||||
|
||||
__extern_always_inline int
|
||||
__NTH (vsprintf (char *__restrict __s, __const char *__restrict __fmt,
|
||||
_G_va_list __ap))
|
||||
{
|
||||
return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __ap);
|
||||
}
|
||||
|
||||
#if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
|
||||
|
||||
@ -42,12 +57,27 @@ extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
|
||||
size_t __slen, __const char *__restrict __format,
|
||||
_G_va_list __ap) __THROW;
|
||||
|
||||
# define snprintf(str, len, ...) \
|
||||
# ifdef __va_arg_pack
|
||||
__extern_always_inline int
|
||||
__NTH (snprintf (char *__restrict __s, size_t __n,
|
||||
__const char *__restrict __fmt, ...))
|
||||
{
|
||||
return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __va_arg_pack ());
|
||||
}
|
||||
# elif !defined __cplusplus
|
||||
# define snprintf(str, len, ...) \
|
||||
__builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
|
||||
__VA_ARGS__)
|
||||
# define vsnprintf(str, len, fmt, ap) \
|
||||
__builtin___vsnprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
|
||||
fmt, ap)
|
||||
# endif
|
||||
|
||||
__extern_always_inline int
|
||||
__NTH (vsnprintf (char *__restrict __s, size_t __n,
|
||||
__const char *__restrict __fmt, _G_va_list __ap))
|
||||
{
|
||||
return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __ap);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -61,14 +91,42 @@ extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
|
||||
extern int __vprintf_chk (int __flag, __const char *__restrict __format,
|
||||
_G_va_list __ap);
|
||||
|
||||
# define printf(...) \
|
||||
# ifdef __va_arg_pack
|
||||
__extern_always_inline int
|
||||
fprintf (FILE *__restrict __stream, __const char *__restrict __fmt, ...)
|
||||
{
|
||||
return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
|
||||
__va_arg_pack ());
|
||||
}
|
||||
|
||||
__extern_always_inline int
|
||||
printf (__const char *__restrict __fmt, ...)
|
||||
{
|
||||
return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
|
||||
}
|
||||
# elif !defined __cplusplus
|
||||
# define printf(...) \
|
||||
__printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
|
||||
# define fprintf(stream, ...) \
|
||||
# define fprintf(stream, ...) \
|
||||
__fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
|
||||
# define vprintf(format, ap) \
|
||||
__vprintf_chk (__USE_FORTIFY_LEVEL - 1, format, ap)
|
||||
# define vfprintf(stream, format, ap) \
|
||||
__vfprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, format, ap)
|
||||
# endif
|
||||
|
||||
__extern_always_inline int
|
||||
vprintf (__const char *__restrict __fmt, _G_va_list __ap)
|
||||
{
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
return __vfprintf_chk (stdout, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
|
||||
#else
|
||||
return __vprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
|
||||
#endif
|
||||
}
|
||||
|
||||
__extern_always_inline int
|
||||
vfprintf (FILE *__restrict __stream,
|
||||
__const char *__restrict __fmt, _G_va_list __ap)
|
||||
{
|
||||
return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -838,7 +838,7 @@ extern void funlockfile (FILE *__stream) __THROW;
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# include <bits/stdio.h>
|
||||
#endif
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
# include <bits/stdio2.h>
|
||||
#endif
|
||||
#ifdef __LDBL_COMPAT
|
||||
|
@ -132,7 +132,8 @@ __MATHDECL (_Mdouble_,creal, (_Mdouble_complex_ __z));
|
||||
/* Now some optimized versions. GCC has handy notations for these
|
||||
functions. Recent GCC handles these as builtin functions so does
|
||||
not need inlines. */
|
||||
#if defined __GNUC__ && !__GNUC_PREREQ (2, 97) && defined __OPTIMIZE__
|
||||
#if defined __GNUC__ && !__GNUC_PREREQ (2, 97) && defined __OPTIMIZE__ \
|
||||
&& defined __extern_inline
|
||||
|
||||
/* Imaginary part of Z. */
|
||||
__extern_inline _Mdouble_
|
||||
|
@ -27,7 +27,7 @@ __LDBL_REDIR_DECL (syslog)
|
||||
__LDBL_REDIR_DECL (vsyslog)
|
||||
#endif
|
||||
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
__LDBL_REDIR_DECL (__syslog_chk)
|
||||
|
||||
# ifdef __USE_BSD
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Checking macros for syslog functions.
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005, 2007 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
|
||||
@ -25,8 +25,16 @@
|
||||
extern void __syslog_chk (int __pri, int __flag, __const char *__fmt, ...)
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||
|
||||
#define syslog(pri, ...) \
|
||||
#ifdef __va_arg_pack
|
||||
__extern_always_inline void
|
||||
syslog (int __pri, int __flag, __const char *__fmt, ...)
|
||||
{
|
||||
return __syslog_chk (__pri, __flag, __fmt, __va_arg_pack ());
|
||||
}
|
||||
#elif !defined __cplusplus
|
||||
# define syslog(pri, ...) \
|
||||
__syslog_chk (pri, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __USE_BSD
|
||||
@ -34,6 +42,9 @@ extern void __vsyslog_chk (int __pri, int __flag, __const char *__fmt,
|
||||
__gnuc_va_list __ap)
|
||||
__attribute__ ((__format__ (__printf__, 3, 0)));
|
||||
|
||||
# define vsyslog(pri, fmt, ap) \
|
||||
__vsyslog_chk (pri, __USE_FORTIFY_LEVEL - 1, fmt, ap)
|
||||
__extern_always_inline void
|
||||
vsyslog (int __pri, __const char *__fmt, __gnuc_va_list __ap)
|
||||
{
|
||||
return __vsyslog_chk (__pri, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
|
||||
}
|
||||
#endif
|
||||
|
@ -281,13 +281,21 @@
|
||||
|
||||
/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
|
||||
inline semantics, unless -fgnu89-inline is used. */
|
||||
#ifdef __GNUC_STDC_INLINE__
|
||||
# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
|
||||
# define __extern_always_inline \
|
||||
#if !defined __cplusplus || __GNUC_PREREQ (4,3)
|
||||
# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
|
||||
# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
|
||||
# define __extern_always_inline \
|
||||
extern __always_inline __attribute__ ((__gnu_inline__))
|
||||
#else
|
||||
# define __extern_inline extern __inline
|
||||
# define __extern_always_inline extern __always_inline
|
||||
# else
|
||||
# define __extern_inline extern __inline
|
||||
# define __extern_always_inline extern __always_inline
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* GCC 4.3 and above allow passing all anonymous arguments of an
|
||||
__extern_always_inline function to some other vararg function. */
|
||||
#if __GNUC_PREREQ (4,3)
|
||||
# define __va_arg_pack() __builtin_va_arg_pack ()
|
||||
#endif
|
||||
|
||||
/* It is possible to compile containing GCC extensions even if GCC is
|
||||
|
@ -203,7 +203,7 @@ extern void vsyslog (int __pri, __const char *__fmt, __gnuc_va_list __ap)
|
||||
|
||||
|
||||
/* Define some macros helping to catch buffer overflows. */
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
# include <bits/syslog.h>
|
||||
#endif
|
||||
#ifdef __LDBL_COMPAT
|
||||
|
@ -1096,7 +1096,7 @@ extern char *ctermid (char *__s) __THROW;
|
||||
|
||||
|
||||
/* Define some macros helping to catch buffer overflows. */
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
# include <bits/unistd.h>
|
||||
#endif
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* Declarations of socket constants, types, and functions.
|
||||
Copyright (C) 1991,92,1994-2001,2003,2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991,92,1994-2001,2003,2005,2007
|
||||
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
|
||||
@ -233,7 +234,7 @@ extern int isfdtype (int __fd, int __fdtype) __THROW;
|
||||
|
||||
|
||||
/* Define some macros helping to catch buffer overflows. */
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
# include <bits/socket2.h>
|
||||
#endif
|
||||
|
||||
|
@ -870,7 +870,7 @@ extern int getloadavg (double __loadavg[], int __nelem)
|
||||
|
||||
|
||||
/* Define some macros helping to catch buffer overflows. */
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
# include <bits/stdlib.h>
|
||||
#endif
|
||||
#ifdef __LDBL_COMPAT
|
||||
|
@ -20,27 +20,40 @@
|
||||
# error "Never use <bits/string3.h> directly; include <string.h> instead."
|
||||
#endif
|
||||
|
||||
__warndecl (__warn_memset_zero_len,
|
||||
"memset used with constant zero length parameter; this could be due to transposed parameters");
|
||||
|
||||
#ifndef __cplusplus
|
||||
/* XXX This is temporarily. We should not redefine any of the symbols
|
||||
and instead integrate the error checking into the original
|
||||
definitions. */
|
||||
#undef memcpy
|
||||
#undef memmove
|
||||
#undef memset
|
||||
#undef strcat
|
||||
#undef strcpy
|
||||
#undef strncat
|
||||
#undef strncpy
|
||||
#ifdef __USE_GNU
|
||||
# undef mempcpy
|
||||
# undef stpcpy
|
||||
#endif
|
||||
#ifdef __USE_BSD
|
||||
# undef bcopy
|
||||
# undef bzero
|
||||
# undef memcpy
|
||||
# undef memmove
|
||||
# undef memset
|
||||
# undef strcat
|
||||
# undef strcpy
|
||||
# undef strncat
|
||||
# undef strncpy
|
||||
# ifdef __USE_GNU
|
||||
# undef mempcpy
|
||||
# undef stpcpy
|
||||
# endif
|
||||
# ifdef __USE_BSD
|
||||
# undef bcopy
|
||||
# undef bzero
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#define memcpy(dest, src, len) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline void *
|
||||
__NTH (memcpy (void *__restrict __dest, __const void *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
#else
|
||||
# define memcpy(dest, src, len) \
|
||||
((__bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memcpy_chk (dest, src, len, __bos0 (dest)) \
|
||||
: __memcpy_ichk (dest, src, len))
|
||||
@ -50,9 +63,17 @@ __NTH (__memcpy_ichk (void *__restrict __dest, __const void *__restrict __src,
|
||||
{
|
||||
return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#define memmove(dest, src, len) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline void *
|
||||
__NTH (memmove (void *__restrict __dest, __const void *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
#else
|
||||
# define memmove(dest, src, len) \
|
||||
((__bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memmove_chk (dest, src, len, __bos0 (dest)) \
|
||||
: __memmove_ichk (dest, src, len))
|
||||
@ -61,10 +82,18 @@ __NTH (__memmove_ichk (void *__dest, __const void *__src, size_t __len))
|
||||
{
|
||||
return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define mempcpy(dest, src, len) \
|
||||
# ifdef __cplusplus
|
||||
__extern_always_inline void *
|
||||
__NTH (mempcpy (void *__restrict __dest, __const void *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
# else
|
||||
# define mempcpy(dest, src, len) \
|
||||
((__bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___mempcpy_chk (dest, src, len, __bos0 (dest)) \
|
||||
: __mempcpy_ichk (dest, src, len))
|
||||
@ -74,6 +103,7 @@ __NTH (__mempcpy_ichk (void *__restrict __dest,
|
||||
{
|
||||
return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@ -82,9 +112,19 @@ __NTH (__mempcpy_ichk (void *__restrict __dest,
|
||||
especially problematic if the intended fill value is zero. In this
|
||||
case no work is done at all. We detect these problems by referring
|
||||
non-existing functions. */
|
||||
__warndecl (__warn_memset_zero_len,
|
||||
"memset used with constant zero length parameter; this could be due to transposed parameters");
|
||||
#define memset(dest, ch, len) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline void *
|
||||
__NTH (memset (void *__dest, int __ch, size_t __len))
|
||||
{
|
||||
if (__builtin_constant_p (__len) && __len == 0)
|
||||
{
|
||||
__warn_memset_zero_len ();
|
||||
return __dest;
|
||||
}
|
||||
return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
|
||||
}
|
||||
#else
|
||||
# define memset(dest, ch, len) \
|
||||
(__builtin_constant_p (len) && (len) == 0 \
|
||||
? (__warn_memset_zero_len (), (void) (ch), (void) (len), (void *) (dest)) \
|
||||
: ((__bos0 (dest) != (size_t) -1) \
|
||||
@ -95,20 +135,41 @@ __NTH (__memset_ichk (void *__dest, int __ch, size_t __len))
|
||||
{
|
||||
return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __USE_BSD
|
||||
# define bcopy(src, dest, len) ((void) \
|
||||
# ifdef __cplusplus
|
||||
__extern_always_inline void
|
||||
__NTH (bcopy (__const void *__restrict __src, void *__restrict __dest,
|
||||
size_t __len))
|
||||
{
|
||||
__builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
|
||||
}
|
||||
__extern_always_inline void
|
||||
__NTH (bzero (void *__dest, size_t __len))
|
||||
{
|
||||
__builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
|
||||
}
|
||||
# else
|
||||
# define bcopy(src, dest, len) ((void) \
|
||||
((__bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memmove_chk (dest, src, len, __bos0 (dest)) \
|
||||
: __memmove_ichk (dest, src, len)))
|
||||
# define bzero(dest, len) ((void) \
|
||||
# define bzero(dest, len) ((void) \
|
||||
((__bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memset_chk (dest, '\0', len, __bos0 (dest)) \
|
||||
: __memset_ichk (dest, '\0', len)))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#define strcpy(dest, src) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline char *
|
||||
__NTH (strcpy (char *__restrict __dest, __const char *__restrict __src))
|
||||
{
|
||||
return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
|
||||
}
|
||||
#else
|
||||
# define strcpy(dest, src) \
|
||||
((__bos (dest) != (size_t) -1) \
|
||||
? __builtin___strcpy_chk (dest, src, __bos (dest)) \
|
||||
: __strcpy_ichk (dest, src))
|
||||
@ -117,10 +178,17 @@ __NTH (__strcpy_ichk (char *__restrict __dest, __const char *__restrict __src))
|
||||
{
|
||||
return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define stpcpy(dest, src) \
|
||||
# ifdef __cplusplus
|
||||
__extern_always_inline char *
|
||||
__NTH (stpcpy (char *__restrict __dest, __const char *__restrict __src))
|
||||
{
|
||||
return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
|
||||
}
|
||||
# else
|
||||
# define stpcpy(dest, src) \
|
||||
((__bos (dest) != (size_t) -1) \
|
||||
? __builtin___stpcpy_chk (dest, src, __bos (dest)) \
|
||||
: __stpcpy_ichk (dest, src))
|
||||
@ -129,10 +197,19 @@ __NTH (__stpcpy_ichk (char *__restrict __dest, __const char *__restrict __src))
|
||||
{
|
||||
return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#define strncpy(dest, src, len) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline char *
|
||||
__NTH (strncpy (char *__restrict __dest, __const char *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
|
||||
}
|
||||
#else
|
||||
# define strncpy(dest, src, len) \
|
||||
((__bos (dest) != (size_t) -1) \
|
||||
? __builtin___strncpy_chk (dest, src, len, __bos (dest)) \
|
||||
: __strncpy_ichk (dest, src, len))
|
||||
@ -142,7 +219,7 @@ __NTH (__strncpy_ichk (char *__restrict __dest, __const char *__restrict __src,
|
||||
{
|
||||
return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// XXX We have no corresponding builtin yet.
|
||||
extern char *__stpncpy_chk (char *__dest, __const char *__src, size_t __n,
|
||||
@ -161,7 +238,14 @@ __NTH (stpncpy (char *__dest, __const char *__src, size_t __n))
|
||||
}
|
||||
|
||||
|
||||
#define strcat(dest, src) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline char *
|
||||
__NTH (strcat (char *__restrict __dest, __const char *__restrict __src))
|
||||
{
|
||||
return __builtin___strcat_chk (__dest, __src, __bos (__dest));
|
||||
}
|
||||
#else
|
||||
# define strcat(dest, src) \
|
||||
((__bos (dest) != (size_t) -1) \
|
||||
? __builtin___strcat_chk (dest, src, __bos (dest)) \
|
||||
: __strcat_ichk (dest, src))
|
||||
@ -170,9 +254,18 @@ __NTH (__strcat_ichk (char *__restrict __dest, __const char *__restrict __src))
|
||||
{
|
||||
return __builtin___strcat_chk (__dest, __src, __bos (__dest));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#define strncat(dest, src, len) \
|
||||
#ifdef __cplusplus
|
||||
__extern_always_inline char *
|
||||
__NTH (strncat (char *__restrict __dest, __const char *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
|
||||
}
|
||||
#else
|
||||
# define strncat(dest, src, len) \
|
||||
((__bos (dest) != (size_t) -1) \
|
||||
? __builtin___strncat_chk (dest, src, len, __bos (dest)) \
|
||||
: __strncat_ichk (dest, src, len))
|
||||
@ -182,3 +275,4 @@ __NTH (__strncat_ichk (char *__restrict __dest, __const char *__restrict __src,
|
||||
{
|
||||
return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
|
||||
}
|
||||
#endif
|
||||
|
@ -423,7 +423,7 @@ extern char *basename (__const char *__filename) __THROW __nonnull ((1));
|
||||
# include <bits/string2.h>
|
||||
# endif
|
||||
|
||||
# if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
# if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
/* Functions with security checks. */
|
||||
# include <bits/string3.h>
|
||||
# endif
|
||||
|
@ -23,7 +23,7 @@
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -23,7 +23,7 @@
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -32,7 +32,7 @@
|
||||
&& defined __GNUC__ && __GNUC__ >= 2 && !__BOUNDED_POINTERS__
|
||||
|
||||
#ifndef __STRING_INLINE
|
||||
# ifdef __cplusplus
|
||||
# ifndef __extern_inline
|
||||
# define __STRING_INLINE inline
|
||||
# else
|
||||
# define __STRING_INLINE __extern_inline
|
||||
|
@ -21,7 +21,7 @@
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -22,7 +22,7 @@
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -31,7 +31,7 @@
|
||||
&& defined __GNUC__ && __GNUC__ >= 2
|
||||
|
||||
#ifndef __STRING_INLINE
|
||||
# ifdef __cplusplus
|
||||
# ifndef __extern_inline
|
||||
# define __STRING_INLINE inline
|
||||
# else
|
||||
# define __STRING_INLINE __extern_inline
|
||||
|
@ -21,7 +21,7 @@
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -128,7 +128,7 @@
|
||||
|
||||
#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) && defined __OPTIMIZE__
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
# else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -28,17 +28,17 @@
|
||||
they need. */
|
||||
#ifdef __GLIBC_HAVE_LONG_LONG
|
||||
__extension__
|
||||
__extern_inline unsigned int gnu_dev_major (unsigned long long int __dev)
|
||||
extern unsigned int gnu_dev_major (unsigned long long int __dev)
|
||||
__THROW;
|
||||
__extension__
|
||||
__extern_inline unsigned int gnu_dev_minor (unsigned long long int __dev)
|
||||
extern unsigned int gnu_dev_minor (unsigned long long int __dev)
|
||||
__THROW;
|
||||
__extension__
|
||||
__extern_inline unsigned long long int gnu_dev_makedev (unsigned int __major,
|
||||
unsigned int __minor)
|
||||
extern unsigned long long int gnu_dev_makedev (unsigned int __major,
|
||||
unsigned int __minor)
|
||||
__THROW;
|
||||
|
||||
# if defined __GNUC__ && __GNUC__ >= 2
|
||||
# if defined __GNUC__ && __GNUC__ >= 2 && defined __USE_EXTERN_INLINES
|
||||
__extension__ __extern_inline unsigned int
|
||||
__NTH (gnu_dev_major (unsigned long long int __dev))
|
||||
{
|
||||
|
@ -22,7 +22,7 @@
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef __extern_inline
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE __extern_inline
|
||||
|
@ -48,7 +48,7 @@ __END_NAMESPACE_C99
|
||||
__LDBL_REDIR1_DECL (wcstold_l, wcstod_l);
|
||||
#endif
|
||||
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
__LDBL_REDIR_DECL (__swprintf_chk)
|
||||
__LDBL_REDIR_DECL (__vswprintf_chk)
|
||||
# if __USE_FORTIFY_LEVEL > 1
|
||||
|
@ -18,7 +18,7 @@
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _WCHAR_H
|
||||
# error "Never include <bits/wchar.h> directly; use <wchar.h> instead."
|
||||
# error "Never include <bits/wchar2.h> directly; use <wchar.h> instead."
|
||||
#endif
|
||||
|
||||
|
||||
@ -198,12 +198,28 @@ extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
|
||||
__const wchar_t *__restrict __format, ...)
|
||||
__THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */;
|
||||
|
||||
extern int __REDIRECT_NTH (__swprintf_alias,
|
||||
(wchar_t *__restrict __s, size_t __n,
|
||||
__const wchar_t *__restrict __fmt, ...),
|
||||
swprintf);
|
||||
|
||||
#ifdef __va_arg_pack
|
||||
__extern_always_inline int
|
||||
__NTH (swprintf (wchar_t *__restrict __s, size_t __n,
|
||||
__const wchar_t *__restrict __fmt, ...))
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
|
||||
return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, __bos (__s),
|
||||
__fmt, __va_arg_pack ());
|
||||
return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ());
|
||||
}
|
||||
#elif !defined __cplusplus
|
||||
/* XXX We might want to have support in gcc for swprintf. */
|
||||
#define swprintf(s, n, ...) \
|
||||
# define swprintf(s, n, ...) \
|
||||
(__bos (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1 \
|
||||
? __swprintf_chk (s, n, __USE_FORTIFY_LEVEL - 1, __bos (s), __VA_ARGS__) \
|
||||
: swprintf (s, n, __VA_ARGS__))
|
||||
|
||||
#endif
|
||||
|
||||
extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
|
||||
int __flag, size_t __s_len,
|
||||
@ -211,10 +227,20 @@ extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
|
||||
__gnuc_va_list __arg)
|
||||
__THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
|
||||
|
||||
#define vswprintf(s, n, fmt, ap) \
|
||||
(__bos (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1 \
|
||||
? __vswprintf_chk (s, n, __USE_FORTIFY_LEVEL - 1, __bos (s), fmt, ap) \
|
||||
: vswprintf (s, n, fmt, ap))
|
||||
extern int __REDIRECT_NTH (__vswprintf_alias,
|
||||
(wchar_t *__restrict __s, size_t __n,
|
||||
__const wchar_t *__restrict __fmt,
|
||||
__gnuc_va_list __ap), vswprintf);
|
||||
|
||||
__extern_always_inline int
|
||||
__NTH (vswprintf (wchar_t *__restrict __s, size_t __n,
|
||||
__const wchar_t *__restrict __fmt, __gnuc_va_list __ap))
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
|
||||
return __vswprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, __bos (__s),
|
||||
__fmt, __ap);
|
||||
return __vswprintf_alias (__s, __n, __fmt, __ap);
|
||||
}
|
||||
|
||||
|
||||
#if __USE_FORTIFY_LEVEL > 1
|
||||
@ -229,14 +255,38 @@ extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
|
||||
extern int __vwprintf_chk (int __flag, __const wchar_t *__restrict __format,
|
||||
__gnuc_va_list __ap);
|
||||
|
||||
# define wprintf(...) \
|
||||
# ifdef __va_arg_pack
|
||||
__extern_always_inline int
|
||||
wprintf (__const wchar_t *__restrict __fmt, ...)
|
||||
{
|
||||
return __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
|
||||
}
|
||||
|
||||
__extern_always_inline int
|
||||
fwprintf (__FILE *__restrict __stream, __const wchar_t *__restrict __fmt, ...)
|
||||
{
|
||||
return __fwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
|
||||
__va_arg_pack ());
|
||||
}
|
||||
# elif !defined __cplusplus
|
||||
# define wprintf(...) \
|
||||
__wprintf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
|
||||
# define fwprintf(stream, ...) \
|
||||
# define fwprintf(stream, ...) \
|
||||
__fwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
|
||||
# define vwprintf(format, ap) \
|
||||
__vwprintf_chk (__USE_FORTIFY_LEVEL - 1, format, ap)
|
||||
# define vfwprintf(stream, format, ap) \
|
||||
__vfwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, format, ap)
|
||||
# endif
|
||||
|
||||
__extern_always_inline int
|
||||
vwprintf (__const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
|
||||
{
|
||||
return __vwprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
|
||||
}
|
||||
|
||||
__extern_always_inline int
|
||||
vfwprintf (__FILE *__restrict __stream,
|
||||
__const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
|
||||
{
|
||||
return __vfwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -327,7 +327,6 @@ __END_NAMESPACE_C99
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
/* Define inline function as optimization. */
|
||||
|
||||
# ifndef __cplusplus
|
||||
/* We can use the BTOWC and WCTOB optimizations since we know that all
|
||||
locales must use ASCII encoding for the values in the ASCII range
|
||||
and because the wchar_t encoding is always ISO 10646. */
|
||||
@ -342,7 +341,6 @@ __extern_inline int
|
||||
__NTH (wctob (wint_t __wc))
|
||||
{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
|
||||
? (int) __wc : __wctob_alias (__wc)); }
|
||||
# endif
|
||||
|
||||
__extern_inline size_t
|
||||
__NTH (mbrlen (__const char *__restrict __s, size_t __n,
|
||||
@ -763,7 +761,7 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
|
||||
#endif
|
||||
|
||||
/* Define some macros helping to catch buffer overflows. */
|
||||
#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
|
||||
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
|
||||
# include <bits/wchar2.h>
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user