libc/minimal: Fix definition of ssize_t
Each GCC target backend is at liberty to define its own SIZE_TYPE. GCC uses this for various purposes, not lease it drives the machinery that spits out format specifier diagnostics when format specifiers are applied to objects with inappropriate type. GCC exposes the current definition of SIZE_TYPE via the preprocessor symbol __SIZE_TYPE__. The GCC build processes also generates various standard library header files that directyle expose stanard types in a form consistent with the current configuration of GCC. Conventionally standard library build processes (for glibc and newlib) pick up the header files generated by the GCC build. In the minimal libc we have no such build process, we don't pick up the header files that the GCC build process generated. Instead we define our own alternative header files and align them with GCC manually. The current definition of ssize_t in minimal libc is out of step with GCC which means that any use of the %z[du] format modifier will issue a diagnostic. We replace the open coded architecture detection in minimal libc and use GCCs __SIZE_TYPE__ directly. Change-Id: I63b5e17bee4f4ab83d49e492e58efd3bafe76807 Signed-off-by: Marcus Shawcroft <marcus.shawcroft@arm.com> tests: fs: Fix printf warning when using newlib Current code uses %ld format specifier to print data of type ssize_t. This causes type warnings when built with newlib. The correct format specifier to be used for ssize_t is %zd. Change-Id: I02a3c628e3d6e8a36a09cd694220406d8faf1730 Signed-off-by: Ramesh Thomas <ramesh.thomas@intel.com>
This commit is contained in:
parent
f5b3e2a09b
commit
458e2ed133
2 changed files with 7 additions and 16 deletions
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
* Copyright (c) 2017 ARM Ltd
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
@ -10,19 +11,9 @@
|
|||
#if !defined(__ssize_t_defined)
|
||||
#define __ssize_t_defined
|
||||
|
||||
#ifdef __i386
|
||||
typedef long int ssize_t;
|
||||
#elif defined(__ARM_ARCH)
|
||||
typedef int ssize_t;
|
||||
#elif defined(__arc__)
|
||||
typedef int ssize_t;
|
||||
#elif defined(__NIOS2__)
|
||||
typedef int ssize_t;
|
||||
#elif defined(__riscv__)
|
||||
typedef int ssize_t;
|
||||
#else
|
||||
#error "The minimal libc library does not recognize the architecture!\n"
|
||||
#endif
|
||||
#define unsigned signed
|
||||
typedef __SIZE_TYPE__ ssize_t;
|
||||
#undef unsigned
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -79,13 +79,13 @@ static int write_test(fs_file_t *fp, off_t ofs, const char *str)
|
|||
|
||||
brw = fs_write(fp, (char *)str, strlen(str));
|
||||
if (brw < 0) {
|
||||
printk("Failed writing to file [%ld]\n", brw);
|
||||
printk("Failed writing to file [%zd]\n", brw);
|
||||
fs_close(fp);
|
||||
return brw;
|
||||
}
|
||||
if (brw < strlen(str)) {
|
||||
printk("Unable to complete write. Volume full.\n");
|
||||
printk("Number of bytes written: [%ld]\n", brw);
|
||||
printk("Number of bytes written: [%zd]\n", brw);
|
||||
fs_close(fp);
|
||||
return -1;
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ static int read_test(fs_file_t *fp, off_t ofs, size_t sz, char *read_buff)
|
|||
|
||||
brw = fs_read(fp, read_buff, sz);
|
||||
if (brw < 0) {
|
||||
printk("Failed reading file [%ld]\n", brw);
|
||||
printk("Failed reading file [%zd]\n", brw);
|
||||
fs_close(fp);
|
||||
return brw;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue