Message ID | 20210208214936.1502047-11-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | stat[fs,vfs] consolidation | expand |
On 2/8/21 4:49 PM, Adhemerval Zanella via Libc-alpha wrote: > The check is moved to LFS fstatat implementation (since it is the > code that actually implements the syscall). LGTM. Reviewed-by: Carlos O'Donell <carlos@redhat.com> > --- > sysdeps/unix/sysv/linux/fstatat64.c | 12 ++++++++ > sysdeps/unix/sysv/linux/generic/Makefile | 2 +- > sysdeps/unix/sysv/linux/generic/stat-check.c | 29 -------------------- > 3 files changed, 13 insertions(+), 30 deletions(-) > delete mode 100644 sysdeps/unix/sysv/linux/generic/stat-check.c > > diff --git a/sysdeps/unix/sysv/linux/fstatat64.c b/sysdeps/unix/sysv/linux/fstatat64.c > index ab41f19e94..a609b4d3ff 100644 > --- a/sysdeps/unix/sysv/linux/fstatat64.c > +++ b/sysdeps/unix/sysv/linux/fstatat64.c > @@ -28,6 +28,18 @@ > #include <kstat_cp.h> > #include <stat_t64_cp.h> > > +#if __TIMESIZE == 64 \ > + && (__WORDSIZE == 32 \ > + && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32)) > +/* Sanity check to avoid newer 32-bit ABI to support non-LFS calls. */ > +_Static_assert (sizeof (__off_t) == sizeof (__off64_t), > + "__blkcnt_t and __blkcnt64_t must match"); > +_Static_assert (sizeof (__ino_t) == sizeof (__ino64_t), > + "__blkcnt_t and __blkcnt64_t must match"); > +_Static_assert (sizeof (__blkcnt_t) == sizeof (__blkcnt64_t), > + "__blkcnt_t and __blkcnt64_t must match"); > +#endif > + > int > __fstatat64_time64 (int fd, const char *file, struct __stat64_t64 *buf, > int flag) > diff --git a/sysdeps/unix/sysv/linux/generic/Makefile b/sysdeps/unix/sysv/linux/generic/Makefile > index 124f83a0ab..7e27e79772 100644 > --- a/sysdeps/unix/sysv/linux/generic/Makefile > +++ b/sysdeps/unix/sysv/linux/generic/Makefile > @@ -1,3 +1,3 @@ > ifeq ($(subdir),misc) > -sysdep_routines += epoll_create inotify_init stat-check > +sysdep_routines += epoll_create inotify_init > endif > diff --git a/sysdeps/unix/sysv/linux/generic/stat-check.c b/sysdeps/unix/sysv/linux/generic/stat-check.c > deleted file mode 100644 > index e09264dd3a..0000000000 > --- a/sysdeps/unix/sysv/linux/generic/stat-check.c > +++ /dev/null > @@ -1,29 +0,0 @@ > -/* Static assert for __blkcnt64_t when __INO_T_MATCHES_INO64_T is defined. > - Copyright (C) 2019-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/>. */ > - > -#include <sys/stat.h> > -#include <bits/typesizes.h> > - > -/* This is due to the layout code in bits/stat.h and the overflow handling in > - wordsize-32/overflow.h, requiring either all or none of the three types > - concerned to have padding. */ > - > -#if defined __INO_T_MATCHES_INO64_T > -_Static_assert (sizeof (__blkcnt_t) == sizeof (__blkcnt64_t), > - "__blkcnt_t and __blkcnt64_t must match"); > -#endif >
diff --git a/sysdeps/unix/sysv/linux/fstatat64.c b/sysdeps/unix/sysv/linux/fstatat64.c index ab41f19e94..a609b4d3ff 100644 --- a/sysdeps/unix/sysv/linux/fstatat64.c +++ b/sysdeps/unix/sysv/linux/fstatat64.c @@ -28,6 +28,18 @@ #include <kstat_cp.h> #include <stat_t64_cp.h> +#if __TIMESIZE == 64 \ + && (__WORDSIZE == 32 \ + && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32)) +/* Sanity check to avoid newer 32-bit ABI to support non-LFS calls. */ +_Static_assert (sizeof (__off_t) == sizeof (__off64_t), + "__blkcnt_t and __blkcnt64_t must match"); +_Static_assert (sizeof (__ino_t) == sizeof (__ino64_t), + "__blkcnt_t and __blkcnt64_t must match"); +_Static_assert (sizeof (__blkcnt_t) == sizeof (__blkcnt64_t), + "__blkcnt_t and __blkcnt64_t must match"); +#endif + int __fstatat64_time64 (int fd, const char *file, struct __stat64_t64 *buf, int flag) diff --git a/sysdeps/unix/sysv/linux/generic/Makefile b/sysdeps/unix/sysv/linux/generic/Makefile index 124f83a0ab..7e27e79772 100644 --- a/sysdeps/unix/sysv/linux/generic/Makefile +++ b/sysdeps/unix/sysv/linux/generic/Makefile @@ -1,3 +1,3 @@ ifeq ($(subdir),misc) -sysdep_routines += epoll_create inotify_init stat-check +sysdep_routines += epoll_create inotify_init endif diff --git a/sysdeps/unix/sysv/linux/generic/stat-check.c b/sysdeps/unix/sysv/linux/generic/stat-check.c deleted file mode 100644 index e09264dd3a..0000000000 --- a/sysdeps/unix/sysv/linux/generic/stat-check.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Static assert for __blkcnt64_t when __INO_T_MATCHES_INO64_T is defined. - Copyright (C) 2019-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/>. */ - -#include <sys/stat.h> -#include <bits/typesizes.h> - -/* This is due to the layout code in bits/stat.h and the overflow handling in - wordsize-32/overflow.h, requiring either all or none of the three types - concerned to have padding. */ - -#if defined __INO_T_MATCHES_INO64_T -_Static_assert (sizeof (__blkcnt_t) == sizeof (__blkcnt64_t), - "__blkcnt_t and __blkcnt64_t must match"); -#endif