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: "Dionna Amalie Glaze via newlib" <newlib at sourceware dot org>
- To: Yaakov Selkowitz <yselkowi at redhat dot com>
- Cc: newlib at sourceware dot org
- Date: Wed, 14 Aug 2019 12:06:34 -0700
- Subject: Re: [PATCH] Make st_*tim visible in stat for POSIX.1-2008
- References: <CAAH4kHZdBrhCYW3R-MLX0nkp=NTcvT2PD-6AmeTm1t-D-asesw@mail.gmail.com> <822320514b423ceb851f0f60a5692b49841232d5.camel@redhat.com>
- Reply-to: Dionna Amalie Glaze <dionnaglaze at google dot com>
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__)
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__)
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 <yselkowi@redhat.com>
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 <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
>
> 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.
>
>
>
--
-Dionna Glaze, PhD (she/her)