This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]