This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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] |
Dear All, > The struct __timespec64's definition has been moved from > ./include/time.h to ./include/bits/types/struct___timespec64.h. > > This change would prevent from polluting other glibc namespaces (when > headers are modified to support 64 bit time on architectures with > __WORDSIZE==32). > > Now it is possible to just include definition of this particular > structure when needed. > > --- > Changes for v2: > - New patch - as suggested by Andreas Schwab Gentle ping on this patch. Are there any more comments? > --- > include/bits/types/struct___timespec64.h | 26 > ++++++++++++++++++++++++ include/time.h | > 24 +--------------------- 2 files changed, 27 insertions(+), 23 > deletions(-) create mode 100644 > include/bits/types/struct___timespec64.h > > diff --git a/include/bits/types/struct___timespec64.h > b/include/bits/types/struct___timespec64.h new file mode 100644 > index 0000000000..0c60f144c8 > --- /dev/null > +++ b/include/bits/types/struct___timespec64.h > @@ -0,0 +1,26 @@ > +#ifndef _TIMESPEC64_H > +#define _TIMESPEC64_H 1 > +# if __TIMESIZE == 64 > +# define __timespec64 timespec > +# else > +# include <endian.h> > +/* The glibc Y2038-proof struct __timespec64 structure for a time > value. > + To keep things Posix-ish, we keep the nanoseconds field a 32-bit > + signed long, but since the Linux field is a 64-bit signed int, we > + pad our tv_nsec with a 32-bit unnamed bit-field padding. > + > + As a general rule the Linux kernel is ignoring upper 32 bits of > + tv_nsec field. */ > +struct __timespec64 > +{ > + __time64_t tv_sec; /* Seconds */ > +# if BYTE_ORDER == BIG_ENDIAN > + __int32_t :32; /* Padding */ > + __int32_t tv_nsec; /* Nanoseconds */ > +# else > + __int32_t tv_nsec; /* Nanoseconds */ > + __int32_t :32; /* Padding */ > +# endif > +}; > +# endif > +#endif > diff --git a/include/time.h b/include/time.h > index bd0b74dbcc..5931f4854c 100644 > --- a/include/time.h > +++ b/include/time.h > @@ -3,11 +3,11 @@ > > #ifndef _ISOMAC > # include <bits/types/struct_timeval.h> > +# include <bits/types/struct___timespec64.h> > # include <bits/types/locale_t.h> > # include <stdbool.h> > # include <time/mktime-internal.h> > # include <sys/time.h> > -# include <endian.h> > # include <time-clockid.h> > # include <sys/time.h> > > @@ -61,28 +61,6 @@ extern void __tzset_parse_tz (const char *tz) > attribute_hidden; extern void __tz_compute (__time64_t timer, struct > tm *tm, int use_localtime) __THROW attribute_hidden; > > -#if __TIMESIZE == 64 > -# define __timespec64 timespec > -#else > -/* The glibc Y2038-proof struct __timespec64 structure for a time > value. > - To keep things Posix-ish, we keep the nanoseconds field a 32-bit > - signed long, but since the Linux field is a 64-bit signed int, we > - pad our tv_nsec with a 32-bit unnamed bit-field padding. > - > - As a general rule the Linux kernel is ignoring upper 32 bits of > - tv_nsec field. */ > -struct __timespec64 > -{ > - __time64_t tv_sec; /* Seconds */ > -# if BYTE_ORDER == BIG_ENDIAN > - __int32_t :32; /* Padding */ > - __int32_t tv_nsec; /* Nanoseconds */ > -# else > - __int32_t tv_nsec; /* Nanoseconds */ > - __int32_t :32; /* Padding */ > -# endif > -}; > -#endif > > #if __TIMESIZE == 64 > # define __itimerspec64 itimerspec Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Attachment:
pgpnTu9y_FXx5.pgp
Description: OpenPGP digital signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |