[PATCH] Make st_*tim visible in stat for POSIX.1-2008

Joel Sherrill joel@rtems.org
Tue Aug 13 18:46:00 GMT 2019


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)
>



More information about the Newlib mailing list