]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701)
authorFlorian Weimer <fweimer@redhat.com>
Fri, 19 Apr 2024 12:38:17 +0000 (14:38 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Fri, 19 Apr 2024 12:38:17 +0000 (14:38 +0200)
These structs describe file formats under /var/log, and should not
depend on the definition of _TIME_BITS.  This is achieved by
defining __WORDSIZE_TIME64_COMPAT32 to 1 on 32-bit ports that
support 32-bit time_t values (where __time_t is 32 bits).

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
18 files changed:
bits/wordsize.h
login/Makefile
login/tst-utmp-size-64.c [new file with mode: 0644]
sysdeps/arm/bits/wordsize.h [new file with mode: 0644]
sysdeps/csky/bits/wordsize.h [new file with mode: 0644]
sysdeps/m68k/bits/wordsize.h [new file with mode: 0644]
sysdeps/microblaze/bits/wordsize.h [new file with mode: 0644]
sysdeps/mips/bits/wordsize.h
sysdeps/nios2/bits/wordsize.h [new file with mode: 0644]
sysdeps/powerpc/powerpc32/bits/wordsize.h
sysdeps/powerpc/powerpc64/bits/wordsize.h
sysdeps/sh/bits/wordsize.h [new file with mode: 0644]
sysdeps/sparc/sparc32/bits/wordsize.h
sysdeps/sparc/sparc64/bits/wordsize.h
sysdeps/unix/sysv/linux/hppa/bits/wordsize.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h
sysdeps/unix/sysv/linux/sparc/bits/wordsize.h
sysdeps/x86/bits/wordsize.h

index 14edae3a11d01c9714172d9dd6b78b38b086c36c..53013a9275c7c81eccb0356ab956eb2688bcf512 100644 (file)
@@ -21,7 +21,9 @@
 #define __WORDSIZE32_PTRDIFF_LONG
 
 /* Set to 1 in order to force time types to be 32 bits instead of 64 bits in
-   struct lastlog and struct utmp{,x} on 64-bit ports.  This may be done in
+   struct lastlog and struct utmp{,x}.  This may be done in
    order to make 64-bit ports compatible with 32-bit ports.  Set to 0 for
-   64-bit ports where the time types are 64-bits or for any 32-bit ports.  */
+   64-bit ports where the time types are 64-bits and new 32-bit ports
+   where time_t is 64 bits, and there is no companion architecture with
+   32-bit time_t.  */
 #define __WORDSIZE_TIME64_COMPAT32
index b26ac42bfceadf8940643e0dedf4c7aea96b076f..f91190e3dcd1e6c63ea71c5d72a0004abd6f57d4 100644 (file)
@@ -44,7 +44,9 @@ subdir-dirs = programs
 vpath %.c programs
 
 tests := tst-utmp tst-utmpx tst-grantpt tst-ptsname tst-getlogin tst-updwtmpx \
-  tst-pututxline-lockfail tst-pututxline-cache tst-utmp-size
+  tst-pututxline-lockfail tst-pututxline-cache tst-utmp-size tst-utmp-size-64
+
+CFLAGS-tst-utmp-size-64.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
 
 # Empty compatibility library for old binaries.
 extra-libs      := libutil
diff --git a/login/tst-utmp-size-64.c b/login/tst-utmp-size-64.c
new file mode 100644 (file)
index 0000000..7a581a4
--- /dev/null
@@ -0,0 +1,2 @@
+/* The on-disk layout must not change in time64 mode.  */
+#include "tst-utmp-size.c"
diff --git a/sysdeps/arm/bits/wordsize.h b/sysdeps/arm/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
diff --git a/sysdeps/csky/bits/wordsize.h b/sysdeps/csky/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
diff --git a/sysdeps/m68k/bits/wordsize.h b/sysdeps/m68k/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
diff --git a/sysdeps/microblaze/bits/wordsize.h b/sysdeps/microblaze/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
index 57f0f2a22f81745caf16c27194541b29d72017ad..30dd3fd85db1f96625324f38ce746db23747836f 100644 (file)
 
 #define __WORDSIZE                     _MIPS_SZPTR
 
-#if _MIPS_SIM == _ABI64
-# define __WORDSIZE_TIME64_COMPAT32    1
-#else
-# define __WORDSIZE_TIME64_COMPAT32    0
-#endif
+#define __WORDSIZE_TIME64_COMPAT32     1
 
 #if __WORDSIZE == 32
 #define __WORDSIZE32_SIZE_ULONG                0
diff --git a/sysdeps/nios2/bits/wordsize.h b/sysdeps/nios2/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
index 04ca9debf00d7ee97ddf83dcd2e66c139bcd9d7c..6993fb6b29ea3f743dedda57771ef9e4dce2169d 100644 (file)
@@ -2,10 +2,9 @@
 
 #if defined __powerpc64__
 # define __WORDSIZE    64
-# define __WORDSIZE_TIME64_COMPAT32    1
 #else
 # define __WORDSIZE    32
-# define __WORDSIZE_TIME64_COMPAT32    0
 # define __WORDSIZE32_SIZE_ULONG       0
 # define __WORDSIZE32_PTRDIFF_LONG     0
 #endif
+#define __WORDSIZE_TIME64_COMPAT32     1
index 04ca9debf00d7ee97ddf83dcd2e66c139bcd9d7c..6993fb6b29ea3f743dedda57771ef9e4dce2169d 100644 (file)
@@ -2,10 +2,9 @@
 
 #if defined __powerpc64__
 # define __WORDSIZE    64
-# define __WORDSIZE_TIME64_COMPAT32    1
 #else
 # define __WORDSIZE    32
-# define __WORDSIZE_TIME64_COMPAT32    0
 # define __WORDSIZE32_SIZE_ULONG       0
 # define __WORDSIZE32_PTRDIFF_LONG     0
 #endif
+#define __WORDSIZE_TIME64_COMPAT32     1
diff --git a/sysdeps/sh/bits/wordsize.h b/sysdeps/sh/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
index 4bbd2e63b49bb2e2f7879050e9b0f8ed62ebaa6e..a2e79e0fa9dc41d92fb8bd45e99a55f90ed816c5 100644 (file)
@@ -1,6 +1,6 @@
 /* Determine the wordsize from the preprocessor defines.  */
 
 #define __WORDSIZE     32
-#define __WORDSIZE_TIME64_COMPAT32     0
+#define __WORDSIZE_TIME64_COMPAT32     1
 #define __WORDSIZE32_SIZE_ULONG        0
 #define __WORDSIZE32_PTRDIFF_LONG      0
index 2f66f10d7206731a2110721685d0ac6dc184ab14..ea103e5970829abc52731614b8835e1796606b4d 100644 (file)
@@ -2,10 +2,9 @@
 
 #if defined __arch64__ || defined __sparcv9
 # define __WORDSIZE    64
-# define __WORDSIZE_TIME64_COMPAT32    1
 #else
 # define __WORDSIZE    32
-# define __WORDSIZE_TIME64_COMPAT32    0
 # define __WORDSIZE32_SIZE_ULONG       0
 # define __WORDSIZE32_PTRDIFF_LONG     0
 #endif
+#define __WORDSIZE_TIME64_COMPAT32     1
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/wordsize.h b/sysdeps/unix/sysv/linux/hppa/bits/wordsize.h
new file mode 100644 (file)
index 0000000..6ecbfe7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright (C) 1999-2024 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/>.  */
+
+#define __WORDSIZE                     32
+#define __WORDSIZE_TIME64_COMPAT32     1
+#define __WORDSIZE32_SIZE_ULONG                0
+#define __WORDSIZE32_PTRDIFF_LONG      0
index 04ca9debf00d7ee97ddf83dcd2e66c139bcd9d7c..6993fb6b29ea3f743dedda57771ef9e4dce2169d 100644 (file)
@@ -2,10 +2,9 @@
 
 #if defined __powerpc64__
 # define __WORDSIZE    64
-# define __WORDSIZE_TIME64_COMPAT32    1
 #else
 # define __WORDSIZE    32
-# define __WORDSIZE_TIME64_COMPAT32    0
 # define __WORDSIZE32_SIZE_ULONG       0
 # define __WORDSIZE32_PTRDIFF_LONG     0
 #endif
+#define __WORDSIZE_TIME64_COMPAT32     1
index 7562875ee23ba8c52156e7e0fa1f4457ae15286e..ea103e5970829abc52731614b8835e1796606b4d 100644 (file)
@@ -2,10 +2,9 @@
 
 #if defined __arch64__ || defined __sparcv9
 # define __WORDSIZE    64
-# define __WORDSIZE_TIME64_COMPAT32    1
 #else
 # define __WORDSIZE    32
 # define __WORDSIZE32_SIZE_ULONG       0
 # define __WORDSIZE32_PTRDIFF_LONG     0
-# define __WORDSIZE_TIME64_COMPAT32    0
 #endif
+#define __WORDSIZE_TIME64_COMPAT32     1
index 70f652bca14d65c1de5a21669e7c0ffb8ecfe5ea..3f40aa76f99c75e5aabc1390ab4a2ff4647e6035 100644 (file)
@@ -8,10 +8,9 @@
 #define __WORDSIZE32_PTRDIFF_LONG      0
 #endif
 
+#define __WORDSIZE_TIME64_COMPAT32 1
+
 #ifdef __x86_64__
-# define __WORDSIZE_TIME64_COMPAT32    1
 /* Both x86-64 and x32 use the 64-bit system call interface.  */
 # define __SYSCALL_WORDSIZE            64
-#else
-# define __WORDSIZE_TIME64_COMPAT32    0
 #endif