y2038: include: Move struct __timeval64 definition to a separate file

The struct __timeval64's definition has been moved from ./include/time.h to
./include/struct___timeval64.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.

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
This commit is contained in:
Lukasz Majewski 2020-04-21 19:01:56 +02:00
parent 481d01fa2b
commit a308615f7c
2 changed files with 18 additions and 14 deletions

View File

@ -0,0 +1,17 @@
#ifndef _STRUCT_TIMEVAL64_H
#define _STRUCT_TIMEVAL64_H
#if __TIMESIZE == 64
# define __timeval64 timeval
#else
/* The glibc Y2038-proof struct __timeval64 structure for a time value.
This structure is NOT supposed to be passed to the Linux kernel.
Instead, it shall be converted to struct __timespec64 and time shall
be [sg]et via clock_[sg]ettime (which are now Y2038 safe). */
struct __timeval64
{
__time64_t tv_sec; /* Seconds */
__suseconds64_t tv_usec; /* Microseconds */
};
#endif
#endif /* _STRUCT_TIMEVAL64_H */

View File

@ -4,6 +4,7 @@
#ifndef _ISOMAC #ifndef _ISOMAC
# include <bits/types/struct_timeval.h> # include <bits/types/struct_timeval.h>
# include <struct___timespec64.h> # include <struct___timespec64.h>
# include <struct___timeval64.h>
# include <bits/types/locale_t.h> # include <bits/types/locale_t.h>
# include <stdbool.h> # include <stdbool.h>
# include <time/mktime-internal.h> # include <time/mktime-internal.h>
@ -73,20 +74,6 @@ struct __itimerspec64
}; };
#endif #endif
#if __TIMESIZE == 64
# define __timeval64 timeval
#else
/* The glibc Y2038-proof struct __timeval64 structure for a time value.
This structure is NOT supposed to be passed to the Linux kernel.
Instead, it shall be converted to struct __timespec64 and time shall
be [sg]et via clock_[sg]ettime (which are now Y2038 safe). */
struct __timeval64
{
__time64_t tv_sec; /* Seconds */
__suseconds64_t tv_usec; /* Microseconds */
};
#endif
#if __TIMESIZE == 64 #if __TIMESIZE == 64
# define __utimbuf64 utimbuf # define __utimbuf64 utimbuf
# define __itimerval64 itimerval # define __itimerval64 itimerval