From 73017bba9d3bc0f8ada159319ff590117c9e5689 Mon Sep 17 00:00:00 2001 From: Dmitry Chestnykh Date: Mon, 26 Feb 2024 13:21:26 +0300 Subject: Add time64 support for MIPS32. Signed-off-by: Dmitry Chestnykh --- libc/sysdeps/linux/common/fstatat.c | 2 +- libc/sysdeps/linux/common/xstatconv.c | 6 +++--- libc/sysdeps/linux/mips/bits/kernel_stat.h | 4 ++++ libc/sysdeps/linux/mips/bits/sem.h | 13 ++++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-) (limited to 'libc') diff --git a/libc/sysdeps/linux/common/fstatat.c b/libc/sysdeps/linux/common/fstatat.c index 8064722d2..d4f566a62 100644 --- a/libc/sysdeps/linux/common/fstatat.c +++ b/libc/sysdeps/linux/common/fstatat.c @@ -62,7 +62,7 @@ int fstatat(int fd, const char *file, struct stat *buf, int flag) .st_mtim.tv_nsec = tmp.stx_mtime.tv_nsec, .st_ctim.tv_sec = tmp.stx_ctime.tv_sec, .st_ctim.tv_nsec = tmp.stx_ctime.tv_nsec, -#if defined(__UCLIBC_USE_TIME64__) +#if defined(__UCLIBC_USE_TIME64__) && !defined(__mips__) .__st_atim32.tv_sec = stx.stx_atime.tv_sec, .__st_atim32.tv_nsec = stx.stx_atime.tv_nsec, .__st_mtim32.tv_sec = stx.stx_mtime.tv_sec, diff --git a/libc/sysdeps/linux/common/xstatconv.c b/libc/sysdeps/linux/common/xstatconv.c index 4b0a7424e..391804e66 100644 --- a/libc/sysdeps/linux/common/xstatconv.c +++ b/libc/sysdeps/linux/common/xstatconv.c @@ -37,7 +37,7 @@ void __xstat_conv(struct kernel_stat *kbuf, struct stat *buf) buf->st_size = kbuf->st_size; buf->st_blksize = kbuf->st_blksize; buf->st_blocks = kbuf->st_blocks; -#if defined(__UCLIBC_USE_TIME64__) +#if defined(__UCLIBC_USE_TIME64__) && !defined(__mips__) buf->st_atim.tv_sec = kbuf->__st_atim32.tv_sec; buf->st_atim.tv_nsec = kbuf->__st_atim32.tv_nsec; buf->st_mtim.tv_sec = kbuf->__st_mtim32.tv_sec; @@ -68,7 +68,7 @@ void __xstat32_conv(struct kernel_stat64 *kbuf, struct stat *buf) buf->st_size = kbuf->st_size; buf->st_blksize = kbuf->st_blksize; buf->st_blocks = kbuf->st_blocks; -#if defined(__UCLIBC_USE_TIME64__) +#if defined(__UCLIBC_USE_TIME64__) && !defined(__mips__) buf->st_atim.tv_sec = kbuf->__st_atim32.tv_sec; buf->st_atim.tv_nsec = kbuf->__st_atim32.tv_nsec; buf->st_mtim.tv_sec = kbuf->__st_mtim32.tv_sec; @@ -102,7 +102,7 @@ void __xstat64_conv(struct kernel_stat64 *kbuf, struct stat64 *buf) buf->st_size = kbuf->st_size; buf->st_blksize = kbuf->st_blksize; buf->st_blocks = kbuf->st_blocks; -#if defined(__UCLIBC_USE_TIME64__) +#if defined(__UCLIBC_USE_TIME64__) && !defined(__mips__) buf->st_atim.tv_sec = kbuf->__st_atim32.tv_sec; buf->st_atim.tv_nsec = kbuf->__st_atim32.tv_nsec; buf->st_mtim.tv_sec = kbuf->__st_mtim32.tv_sec; diff --git a/libc/sysdeps/linux/mips/bits/kernel_stat.h b/libc/sysdeps/linux/mips/bits/kernel_stat.h index a2a6169a3..23a6ce61a 100644 --- a/libc/sysdeps/linux/mips/bits/kernel_stat.h +++ b/libc/sysdeps/linux/mips/bits/kernel_stat.h @@ -14,7 +14,11 @@ typedef struct { } __ktimespec_t; #else typedef struct { +#if defined(__UCLIBC_USE_TIME64__) + __S32_TYPE tv_sec; +#else time_t tv_sec; +#endif unsigned long tv_nsec; } __ktimespec_t; #endif diff --git a/libc/sysdeps/linux/mips/bits/sem.h b/libc/sysdeps/linux/mips/bits/sem.h index 3e4e9682b..35eaa05c3 100644 --- a/libc/sysdeps/linux/mips/bits/sem.h +++ b/libc/sysdeps/linux/mips/bits/sem.h @@ -38,9 +38,20 @@ struct semid_ds { struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ +#if defined(__UCLIBC_USE_TIME64__) + unsigned long int __sem_otime_internal_1; /* last semop() time */ + unsigned long int __sem_otime_internal_2; + unsigned long int __sem_ctime_internal_1; /* last time changed by semctl() */ + unsigned long int __sem_ctime_internal_2; +#else + __time_t sem_otime; /* last semop() time */ __time_t sem_ctime; /* last time changed by semctl() */ +#endif unsigned long int sem_nsems; /* number of semaphores in set */ +#if defined(__UCLIBC_USE_TIME64__) + __time_t sem_otime; + __time_t sem_ctime; +#endif unsigned long int __uclibc_unused1; unsigned long int __uclibc_unused2; }; -- cgit v1.2.3