use architecture-specific ssize_t definition

after change 32822 was rejected, this is the more light-weight
version of the fix: libc/include/sys/types.h already - via
libc/kernel/common/linux/posix_types.h - includes a definition
of __kernel_ssize_t from libc/kernel/arch-*/asm/posix_types.h
which is architecture-specific, toolchain-agnostic and also
gets rid of the gcc -Wformat warning (which it issues correctly,
since this i̲s̲ indeed a bug in bionic)

Change-Id: Ie4503ab16628bc25815a836d07556f665e9795c7
This commit is contained in:
Thorsten Glaser 2013-02-17 16:50:58 +00:00 committed by Elliott Hughes
parent 593abb7b59
commit c641cafbc3
2 changed files with 10 additions and 1 deletions

View File

@ -85,7 +85,7 @@ typedef .... pthread_t;
#ifndef _SSIZE_T_DEFINED_
#define _SSIZE_T_DEFINED_
typedef long int ssize_t;
typedef __kernel_ssize_t ssize_t;
#endif
typedef __kernel_suseconds_t suseconds_t;

View File

@ -169,3 +169,12 @@ TEST(stdio, getline_invalid) {
ASSERT_EQ(getline(&buffer, &buffer_length, fp), -1);
ASSERT_EQ(EBADF, errno);
}
TEST(stdio, printf_ssize_t) {
// We used to have a ssize_t definition that confused GCC into saying:
// error: format '%zd' expects argument of type 'signed size_t',
// but argument 4 has type 'ssize_t {aka long int}' [-Werror=format]
ssize_t v = 1;
char buf[32];
snprintf(buf, sizeof(buf), "%zd", v);
}