Re: [PATCH] Make st_*tim visible in stat for POSIX.1-2008
Joel Sherrill <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAF9ehCUKqiVHVf=rmud=yxF69-1zfa3-jNaR1f-3MGhx0vE=xg@mail.gmail.com> |
On Tue, Aug 13, 2019 at 1:30 PM Dionna Amalie Glaze via newlib < [email protected]> wrote: > The st_{a,c,m}tim fields are needed for POSIX.1-2008, not just RTEMS. > > Signed-off-by: Dionna Glaze <[email protected]> > --- > 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) >