]> sourceware.org Git - glibc.git/commitdiff
y2038: Use a common definition for msqid_ds
authorLukasz Majewski <lukma@denx.de>
Thu, 22 Oct 2020 10:04:40 +0000 (12:04 +0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 15 Jun 2021 13:42:11 +0000 (10:42 -0300)
Instead of replicate the same definitions from struct_msqid64_ds.h
on the multiple struct_msqid_ds.h, use a common header which is included
when required (struct_msqid64_ds_helper.h).

The __USE_TIME_BITS64 is not defined internally yet, although the
internal header is used when building the 64-bit stat implementations.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h
sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h

index c343d8c7d04a8faf75c2c0f6a839df8d376cf750..6715a4b62330bec7bf2c2f816fdd048609ae54ba 100644 (file)
@@ -101,7 +101,8 @@ sysdep_headers += sys/mount.h sys/acct.h \
                  bits/types/struct_shmid_ds.h \
                  bits/ipc-perm.h \
                  bits/struct_stat.h \
-                 bits/struct_stat_time64_helper.h
+                 bits/struct_stat_time64_helper.h \
+                 bits/types/struct_msqid64_ds_helper.h
 
 tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
         tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \
index 43e8cd7cfc337842c6aa73adcd97ef7e3e70d399..992734914a9de6593e4096f3215e3de2b65e050a 100644 (file)
 #else
 struct __msqid64_ds
 {
-  struct ipc_perm msg_perm;    /* structure describing operation permission */
-  __time64_t msg_stime;                /* time of last msgsnd command */
-  __time64_t msg_rtime;                /* time of last msgsnd command */
-  __time64_t msg_ctime;                /* time of last change */
-  __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
-  msgqnum_t msg_qnum;          /* number of messages currently on queue */
-  msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
-  __pid_t msg_lspid;           /* pid of last msgsnd() */
-  __pid_t msg_lrpid;           /* pid of last msgrcv() */
+# include <bits/types/struct_msqid64_ds_helper.h>
 };
 #endif
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h
new file mode 100644 (file)
index 0000000..58da9f2
--- /dev/null
@@ -0,0 +1,30 @@
+/* Common definitions for struct msqid_ds with 64-bit time.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <https://www.gnu.org/licenses/>.  */
+
+  /* Content of internal __msqid64_ds.  */
+  struct ipc_perm msg_perm;    /* structure describing operation permission */
+  __time64_t msg_stime;                /* time of last msgsnd command */
+  __time64_t msg_rtime;                /* time of last msgsnd command */
+  __time64_t msg_ctime;                /* time of last change */
+  __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;          /* number of messages currently on queue */
+  msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
+  __pid_t msg_lspid;           /* pid of last msgsnd() */
+  __pid_t msg_lrpid;           /* pid of last msgrcv() */
+  unsigned long int __glibc_reserved4;
+  unsigned long int __glibc_reserved5;
index 1ed041ae306225694b0a12092eb082bf2ef9ca65..ae10a48452701a75f0f1a887e403150c9e474264 100644 (file)
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;    /* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   __time_t msg_stime;          /* time of last msgsnd command */
   unsigned long int __msg_stime_high;
   __time_t msg_rtime;          /* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_ctime;          /* time of last change */
   unsigned long int __msg_ctime_high;
-#else
+# else
   __time_t msg_stime;          /* time of last msgsnd command */
   __time_t msg_rtime;          /* time of last msgsnd command */
   __time_t msg_ctime;          /* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;          /* number of messages currently on queue */
   msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@ struct msqid_ds
   __pid_t msg_lrpid;           /* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
index d943edeb787d25343618f38de2a131c5d4fee042..5b82dd7f5eccca2a641abcf988dfd72e52dd0304 100644 (file)
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;    /* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   unsigned long int __msg_stime_high;
   __time_t msg_stime;          /* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;          /* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;          /* time of last change */
-#else
+# else
   __time_t msg_stime;          /* time of last msgsnd command */
   __time_t msg_rtime;          /* time of last msgsnd command */
   __time_t msg_ctime;          /* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;          /* number of messages currently on queue */
   msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@ struct msqid_ds
   __pid_t msg_lrpid;           /* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
index bdca5e5fe21fc69ce7894e18dd0e533f4baf7fc5..00c180424559f502dcce6a80aa1bfcb8d9d1ee04 100644 (file)
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;    /* structure describing operation permission */
-#if __TIMESIZE == 32
-# ifdef __MIPSEL__
+# if __TIMESIZE == 32
+#  ifdef __MIPSEL__
   __time_t msg_stime;          /* time of last msgsnd command */
   unsigned long int __msg_stime_high;
   __time_t msg_rtime;          /* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_ctime;          /* time of last change */
   unsigned long int __msg_ctime_high;
-# else
+#  else
   unsigned long int __msg_stime_high;
   __time_t msg_stime;          /* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;          /* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;          /* time of last change */
-# endif
-#else
+#  endif
+# else
   __time_t msg_stime;          /* time of last msgsnd command */
   __time_t msg_rtime;          /* time of last msgsnd command */
   __time_t msg_ctime;          /* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;          /* number of messages currently on queue */
   msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
@@ -53,4 +58,5 @@ struct msqid_ds
   __pid_t msg_lrpid;           /* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
index 72842ed7479c107da687c013bb0a61d9a7da591c..8c296d23422088097b5cbd724e9cb57a74d0ec9a 100644 (file)
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;    /* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   unsigned long int __msg_stime_high;
   __time_t msg_stime;          /* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;          /* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;          /* time of last change */
-#else
+# else
   __time_t msg_stime;          /* time of last msgsnd command */
   __time_t msg_rtime;          /* time of last msgsnd command */
   __time_t msg_ctime;          /* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;          /* number of messages currently on queue */
   msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@ struct msqid_ds
   __pid_t msg_lrpid;           /* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
index 22e1839de17d8e7bd378101e9972c77b257555b9..3c1b68ccc0e2e2e12554cace8ecc4cfa3fe9a54f 100644 (file)
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;    /* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   unsigned long int __msg_stime_high;
   __time_t msg_stime;          /* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;          /* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;          /* time of last change */
-#else
+# else
   __time_t msg_stime;          /* time of last msgsnd command */
   __time_t msg_rtime;          /* time of last msgsnd command */
   __time_t msg_ctime;          /* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;          /* number of messages currently on queue */
   msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@ struct msqid_ds
   __pid_t msg_lrpid;           /* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
This page took 0.061029 seconds and 5 git commands to generate.