diff mbox series

[uclibc-ng-devel] libc: restore correct definition of semid_ds struct.

Message ID 20240229171116.2830552-1-dm.chestnykh@gmail.com
State Accepted
Headers show
Series [uclibc-ng-devel] libc: restore correct definition of semid_ds struct. | expand

Commit Message

Dmitry Chestnykh Feb. 29, 2024, 5:11 p.m. UTC
Previously the common definition of this structure was broken by a mistake.
Restore it correctly for all needed architectures and all use cases.

Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
---
 libc/sysdeps/linux/common/bits/sem.h | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

Comments

Waldemar Brodkorb March 3, 2024, 7:11 p.m. UTC | #1
Hi Dmitry,
Dmitry Chestnykh wrote,

> Previously the common definition of this structure was broken by a mistake.
> Restore it correctly for all needed architectures and all use cases.
> 
> Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>

Committed and pushed,
 thanks
  Waldemar
diff mbox series

Patch

diff --git a/libc/sysdeps/linux/common/bits/sem.h b/libc/sysdeps/linux/common/bits/sem.h
index 06a256259..1c0836c6d 100644
--- a/libc/sysdeps/linux/common/bits/sem.h
+++ b/libc/sysdeps/linux/common/bits/sem.h
@@ -39,22 +39,33 @@ 
 struct semid_ds
 {
   struct ipc_perm sem_perm;		/* operation permission struct */
-
+#if defined(__UCLIBC_USE_TIME64__)
   unsigned long int __sem_otime_internal_1;
   unsigned long int __sem_otime_internal_2;
+#else
+  __time_t sem_otime;			/* last semop() time */
+#endif
+#if (__WORDSIZE == 32 && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__)) || \
+    ((defined(__arm__) || defined(__or1k__) || defined(__xtensa__)) && !defined(__UCLIBC_USE_TIME64__))
+  unsigned long int __uclibc_unused1;
+#endif
+#if defined(__UCLIBC_USE_TIME64__)
   unsigned long int __sem_ctime_internal_1;
   unsigned long int __sem_ctime_internal_2;
-#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-  unsigned short int sem_nsems;		/* number of semaphores in set */
-  char __paddind[sizeof(long int) - sizeof(short int)];
 #else
-  char __padding[sizeof(long int) - sizeof(short int)];
-  unsigned short int sem_nsems;		/* number of semaphores in set */
+  __time_t sem_ctime;			/* last time changed by semctl() */
 #endif
-  unsigned long int __uclibc_unused3;
-  unsigned long int __uclibc_unused4;
+#if (__WORDSIZE == 32 && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__)) || \
+    ((defined(__arm__) || defined(__or1k__) || defined(__xtensa__)) && !defined(__UCLIBC_USE_TIME64__))
+  unsigned long int __uclibc_unused2;
+#endif
+  unsigned long int sem_nsems;		/* number of semaphores in set */
+#if defined(__UCLIBC_USE_TIME64__)
   __time_t sem_otime;			/* last semop() time */
   __time_t sem_ctime;			/* last time changed by semctl() */
+#endif
+  unsigned long int __uclibc_unused3;
+  unsigned long int __uclibc_unused4;
 };
 
 /* The user should define a union like the following to use it for arguments