Re: [PATCH] Make st_*tim visible in stat for POSIX.1-2008
Yaakov Selkowitz <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 2019-08-14 at 12:06 -0700, Dionna Amalie Glaze wrote:
> Ah you're right, I didn't properly handle the block size definitions.
> Here's another go at it that splits the timestamp declarations from the
> blocksize declarations.
>
> ---
> newlib/libc/include/sys/stat.h | 64 ++++++++++++++++++----------------
> 1 file changed, 34 insertions(+), 30 deletions(-)
>
> diff --git a/newlib/libc/include/sys/stat.h b/newlib/libc/include/sys/stat.h
> index eee98db64..4a05081e4 100644
> --- a/newlib/libc/include/sys/stat.h
> +++ b/newlib/libc/include/sys/stat.h
> @@ -24,7 +24,7 @@ extern "C" {
> #define stat64 stat
> #endif
> #else
> -struct stat
> +struct stat
> {
> dev_t st_dev;
> ino_t st_ino;
> @@ -34,15 +34,11 @@ struct stat
> gid_t st_gid;
> dev_t st_rdev;
> off_t st_size;
> -#if defined(__rtems__)
> +#if defined(__MISC_VISIBLE) || __POSIX_VISIBLE >= 200809 || defined(__rtems__)
The __*_VISIBLE macros are *always* defined, question is to what.
These must therefore be used as #if __MISC_VISIBLE etc.
> struct timespec st_atim;
> struct timespec st_mtim;
> struct timespec st_ctim;
> - blksize_t st_blksize;
> - blkcnt_t st_blocks;
> -#else
> - /* SysV/sco doesn't have the rest... But Solaris, eabi does. */
> -#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
> +#elif defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
What defined __srv4__ that should trigger this section? It probably
needs to be moved before the #if __MISC_VISIBLE etc. hunk.
> time_t st_atime;
> time_t st_mtime;
> time_t st_ctime;
> @@ -53,14 +49,19 @@ struct stat
> long st_spare2;
> time_t st_ctime;
> long st_spare3;
> +#endif
> +#if defined(__rtems__)
> + blksize_t st_blksize;
> + blkcnt_t st_blocks;
> +/* SysV/sco doesn't have the rest... But Solaris, eabi does. */
> +#elif !defined(__svr4__) || defined(__PPC__) || defined(__sun__)
> blksize_t st_blksize;
> blkcnt_t st_blocks;
> long st_spare4[2];
> #endif
> -#endif
> };
>
> -#if defined(__rtems__)
> +#if __POSIX_VISIBLE >= 200809 || defined(__rtems__)
>
> On Wed, Aug 14, 2019 at 11:53 AM Yaakov Selkowitz wrote:
> > On Tue, 2019-08-13 at 11:29 -0700, Dionna Amalie Glaze via newlib
> > 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
> >
> > Nak.
> >
> > 1) __USE_MISC is a glibc internal and has no meaning within Newlib.
> > The proper guards must be used.
> >
> > 2) This would cause the struct size to vary based on FTMs. This is a
> > big no-no. There needs to be size equivalent no-ops in an #else chunk
> > to match this.
> >
> > > struct timespec st_atim;
> > > struct timespec st_mtim;
> > > struct timespec st_ctim;
> > > +#endif
> > > +#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
--
Yaakov Selkowitz
Senior Software Engineer - Platform Enablement
Red Hat, Inc.