This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [PATCH] Make st_*tim visible in stat for POSIX.1-2008
- From: Joel Sherrill <joel at rtems dot org>
- To: Dionna Amalie Glaze <dionnaglaze at google dot com>
- Cc: Newlib <newlib at sourceware dot org>
- Date: Tue, 13 Aug 2019 13:46:24 -0500
- Subject: Re: [PATCH] Make st_*tim visible in stat for POSIX.1-2008
- References: <CAAH4kHZdBrhCYW3R-MLX0nkp=NTcvT2PD-6AmeTm1t-D-asesw@mail.gmail.com>
- Reply-to: joel at rtems dot org
On Tue, Aug 13, 2019 at 1:30 PM Dionna Amalie Glaze via newlib <
newlib@sourceware.org> wrote:
> The st_{a,c,m}tim fields are needed for POSIX.1-2008, not just RTEMS.
>
> Signed-off-by: Dionna Glaze <dionnaglaze@google.com>
> ---
> newlib/libc/include/sys/stat.h | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/newlib/libc/include/sys/stat.h
> b/newlib/libc/include/sys/stat.h
> index eee98db64..052ef5a66 100644
> --- a/newlib/libc/include/sys/stat.h
> +++ b/newlib/libc/include/sys/stat.h
> @@ -34,10 +34,12 @@ struct stat
> gid_t st_gid;
> dev_t st_rdev;
> off_t st_size;
> -#if defined(__rtems__)
> +#if defined(__USE_MISC) || __POSIX_VISIBLE >= 200809
> struct timespec st_atim;
> struct timespec st_mtim;
> struct timespec st_ctim;
> +#endif
>
If I am reading this change correctly, this is breakage for RTEMS. Both of
those
terms are defined as a consequence of user provided defines. If the user
application
and RTEMS are not compiled with the same options, the fields in the
structure will
not agree and these below will be overlaid on the time fields.
Most of the newlib targets are single address space so changing the fields
in
the structure based on user provided conditionals is going to introduce
breakage.
Perhaps adding a new define to sys/config.h so the fields are always there
for
the targets that support them. I couldn't find any example that wasn't
based on
a hard-coded always on value in either sys/config.h or sys/features.h. Maybe
someone else has another idea.
Preprocessing this test program confirms that __POSIX_VISIBLE isn't defined
by default for RTEMS.
=========================
#include <sys/stat.h>
int X = __POSIX_VISIBLE;
=========================
> +#if defined(__rtems__)
> blksize_t st_blksize;
> blkcnt_t st_blocks;
> #else
> @@ -60,7 +62,7 @@ struct stat
> #endif
> };
>
>
> -#if defined(__rtems__)
> +#if __POSIX_VISIBLE >= 200809
> #define st_atime st_atim.tv_sec
> #define st_ctime st_ctim.tv_sec
> #define st_mtime st_mtim.tv_sec
>
> --
> -Dionna Glaze, PhD (she/her)
>