Message ID | 20210518205613.1487824-25-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | Add 64 bit time support on legacy ABIs | expand |
On Tue, 18 May 2021 17:56:12 -0300 Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > The patch adds redirections for xstat, xlstat, and xfstat when > _TIME_BITS=64 is defined. Reviewed-by: Lukasz Majewski <lukma@denx.de> > --- > support/Makefile | 3 +++ > support/support-xfstat-time64.c | 32 ++++++++++++++++++++++++++++++++ > support/support-xstat-time64.c | 32 ++++++++++++++++++++++++++++++++ > support/xlstat-time64.c | 32 ++++++++++++++++++++++++++++++++ > support/xunistd.h | 13 +++++++++++++ > 5 files changed, 112 insertions(+) > create mode 100644 support/support-xfstat-time64.c > create mode 100644 support/support-xstat-time64.c > create mode 100644 support/xlstat-time64.c > > diff --git a/support/Makefile b/support/Makefile > index 1ee73f81bc..8b8534a3c6 100644 > --- a/support/Makefile > +++ b/support/Makefile > @@ -40,7 +40,9 @@ libsupport-routines = \ > resolv_test \ > set_fortify_handler \ > support-xfstat \ > + support-xfstat-time64 \ > support-xstat \ > + support-xstat-time64 \ > support_become_root \ > support_can_chroot \ > support_capture_subprocess \ > @@ -117,6 +119,7 @@ libsupport-routines = \ > xlisten \ > xlseek \ > xlstat \ > + xlstat-time64 \ > xmalloc \ > xmemstream \ > xmkdir \ > diff --git a/support/support-xfstat-time64.c > b/support/support-xfstat-time64.c new file mode 100644 > index 0000000000..324c5d20d2 > --- /dev/null > +++ b/support/support-xfstat-time64.c > @@ -0,0 +1,32 @@ > +/* 64-bit time_t stat with error checking. > + 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/>. */ > + > +/* NB: Non-standard file name to avoid sysdeps override for xstat. > */ + > +#include <support/check.h> > +#include <support/xunistd.h> > +#include <sys/stat.h> > + > +#if __TIMESIZE != 64 > +void > +xfstat_time64 (int fd, struct __stat64_t64 *result) > +{ > + if (__fstat64_time64 (fd, result) != 0) > + FAIL_EXIT1 ("__fstat64_time64 (%d): %m", fd); > +} > +#endif > diff --git a/support/support-xstat-time64.c > b/support/support-xstat-time64.c new file mode 100644 > index 0000000000..7d0194b98a > --- /dev/null > +++ b/support/support-xstat-time64.c > @@ -0,0 +1,32 @@ > +/* 64-bit time_t stat with error checking. > + 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/>. */ > + > +/* NB: Non-standard file name to avoid sysdeps override for xstat. > */ + > +#include <support/check.h> > +#include <support/xunistd.h> > +#include <sys/stat.h> > + > +#if __TIMESIZE != 64 > +void > +xstat_time64 (const char *path, struct __stat64_t64 *result) > +{ > + if (__stat64_time64 (path, result) != 0) > + FAIL_EXIT1 ("__stat64_time64 (\"%s\"): %m", path); > +} > +#endif > diff --git a/support/xlstat-time64.c b/support/xlstat-time64.c > new file mode 100644 > index 0000000000..ef4d922635 > --- /dev/null > +++ b/support/xlstat-time64.c > @@ -0,0 +1,32 @@ > +/* 64-bit time_t stat with error checking. > + 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/>. */ > + > +/* NB: Non-standard file name to avoid sysdeps override for xstat. > */ + > +#include <support/check.h> > +#include <support/xunistd.h> > +#include <sys/stat.h> > + > +#if __TIMESIZE != 64 > +void > +xlstat_time64 (const char *path, struct __stat64_t64 *result) > +{ > + if (__lstat64_time64 (path, result) != 0) > + FAIL_EXIT1 ("__lstat64_time64 (\"%s\"): %m", path); > +} > +#endif > diff --git a/support/xunistd.h b/support/xunistd.h > index c642588c29..e4ade65c85 100644 > --- a/support/xunistd.h > +++ b/support/xunistd.h > @@ -24,6 +24,7 @@ > > #include <sys/cdefs.h> > #include <sys/types.h> > +#include <sys/stat.h> > #include <unistd.h> > > __BEGIN_DECLS > @@ -35,9 +36,21 @@ pid_t xwaitpid (pid_t, int *status, int flags); > void xpipe (int[2]); > void xdup2 (int, int); > int xopen (const char *path, int flags, mode_t); > +#ifndef __USE_TIME_BITS64 > +# ifdef __USE_FILE_OFFSET64 > +void xstat (const char *path, struct stat *); > +void xlstat (const char *path, struct stat *); > +void xfstat (int fd, struct stat *); > +# else > void xstat (const char *path, struct stat64 *); > void xlstat (const char *path, struct stat64 *); > void xfstat (int fd, struct stat64 *); > +# endif > +#else > +void __REDIRECT (xstat, (const char *path, struct stat *), > xstat_time64); +void __REDIRECT (xlstat, (const char *path, struct > stat *), xlstat_time64); +void __REDIRECT (xfstat, (int fd, struct > stat *), xfstat_time64); +#endif > void xmkdir (const char *path, mode_t); > void xchroot (const char *path); > void xunlink (const char *path); Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
On 5/18/21 4:56 PM, Adhemerval Zanella wrote: > The patch adds redirections for xstat, xlstat, and xfstat when > _TIME_BITS=64 is defined. LGTM. No regressions on x86_64, i686, ppc64le, aarch64, s390x. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com> > --- > support/Makefile | 3 +++ > support/support-xfstat-time64.c | 32 ++++++++++++++++++++++++++++++++ > support/support-xstat-time64.c | 32 ++++++++++++++++++++++++++++++++ > support/xlstat-time64.c | 32 ++++++++++++++++++++++++++++++++ > support/xunistd.h | 13 +++++++++++++ > 5 files changed, 112 insertions(+) > create mode 100644 support/support-xfstat-time64.c > create mode 100644 support/support-xstat-time64.c > create mode 100644 support/xlstat-time64.c > > diff --git a/support/Makefile b/support/Makefile > index 1ee73f81bc..8b8534a3c6 100644 > --- a/support/Makefile > +++ b/support/Makefile > @@ -40,7 +40,9 @@ libsupport-routines = \ > resolv_test \ > set_fortify_handler \ > support-xfstat \ > + support-xfstat-time64 \ > support-xstat \ > + support-xstat-time64 \ > support_become_root \ > support_can_chroot \ > support_capture_subprocess \ > @@ -117,6 +119,7 @@ libsupport-routines = \ > xlisten \ > xlseek \ > xlstat \ > + xlstat-time64 \ > xmalloc \ > xmemstream \ > xmkdir \ > diff --git a/support/support-xfstat-time64.c b/support/support-xfstat-time64.c > new file mode 100644 > index 0000000000..324c5d20d2 > --- /dev/null > +++ b/support/support-xfstat-time64.c > @@ -0,0 +1,32 @@ > +/* 64-bit time_t stat with error checking. > + 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/>. */ > + > +/* NB: Non-standard file name to avoid sysdeps override for xstat. */ > + > +#include <support/check.h> > +#include <support/xunistd.h> > +#include <sys/stat.h> > + > +#if __TIMESIZE != 64 > +void > +xfstat_time64 (int fd, struct __stat64_t64 *result) > +{ > + if (__fstat64_time64 (fd, result) != 0) > + FAIL_EXIT1 ("__fstat64_time64 (%d): %m", fd); > +} > +#endif > diff --git a/support/support-xstat-time64.c b/support/support-xstat-time64.c > new file mode 100644 > index 0000000000..7d0194b98a > --- /dev/null > +++ b/support/support-xstat-time64.c > @@ -0,0 +1,32 @@ > +/* 64-bit time_t stat with error checking. > + 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/>. */ > + > +/* NB: Non-standard file name to avoid sysdeps override for xstat. */ > + > +#include <support/check.h> > +#include <support/xunistd.h> > +#include <sys/stat.h> > + > +#if __TIMESIZE != 64 > +void > +xstat_time64 (const char *path, struct __stat64_t64 *result) > +{ > + if (__stat64_time64 (path, result) != 0) > + FAIL_EXIT1 ("__stat64_time64 (\"%s\"): %m", path); > +} > +#endif > diff --git a/support/xlstat-time64.c b/support/xlstat-time64.c > new file mode 100644 > index 0000000000..ef4d922635 > --- /dev/null > +++ b/support/xlstat-time64.c > @@ -0,0 +1,32 @@ > +/* 64-bit time_t stat with error checking. > + 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/>. */ > + > +/* NB: Non-standard file name to avoid sysdeps override for xstat. */ > + > +#include <support/check.h> > +#include <support/xunistd.h> > +#include <sys/stat.h> > + > +#if __TIMESIZE != 64 > +void > +xlstat_time64 (const char *path, struct __stat64_t64 *result) > +{ > + if (__lstat64_time64 (path, result) != 0) > + FAIL_EXIT1 ("__lstat64_time64 (\"%s\"): %m", path); > +} > +#endif > diff --git a/support/xunistd.h b/support/xunistd.h > index c642588c29..e4ade65c85 100644 > --- a/support/xunistd.h > +++ b/support/xunistd.h > @@ -24,6 +24,7 @@ > > #include <sys/cdefs.h> > #include <sys/types.h> > +#include <sys/stat.h> > #include <unistd.h> > > __BEGIN_DECLS > @@ -35,9 +36,21 @@ pid_t xwaitpid (pid_t, int *status, int flags); > void xpipe (int[2]); > void xdup2 (int, int); > int xopen (const char *path, int flags, mode_t); > +#ifndef __USE_TIME_BITS64 > +# ifdef __USE_FILE_OFFSET64 > +void xstat (const char *path, struct stat *); > +void xlstat (const char *path, struct stat *); > +void xfstat (int fd, struct stat *); > +# else > void xstat (const char *path, struct stat64 *); > void xlstat (const char *path, struct stat64 *); > void xfstat (int fd, struct stat64 *); > +# endif > +#else > +void __REDIRECT (xstat, (const char *path, struct stat *), xstat_time64); > +void __REDIRECT (xlstat, (const char *path, struct stat *), xlstat_time64); > +void __REDIRECT (xfstat, (int fd, struct stat *), xfstat_time64); > +#endif > void xmkdir (const char *path, mode_t); > void xchroot (const char *path); > void xunlink (const char *path); >
diff --git a/support/Makefile b/support/Makefile index 1ee73f81bc..8b8534a3c6 100644 --- a/support/Makefile +++ b/support/Makefile @@ -40,7 +40,9 @@ libsupport-routines = \ resolv_test \ set_fortify_handler \ support-xfstat \ + support-xfstat-time64 \ support-xstat \ + support-xstat-time64 \ support_become_root \ support_can_chroot \ support_capture_subprocess \ @@ -117,6 +119,7 @@ libsupport-routines = \ xlisten \ xlseek \ xlstat \ + xlstat-time64 \ xmalloc \ xmemstream \ xmkdir \ diff --git a/support/support-xfstat-time64.c b/support/support-xfstat-time64.c new file mode 100644 index 0000000000..324c5d20d2 --- /dev/null +++ b/support/support-xfstat-time64.c @@ -0,0 +1,32 @@ +/* 64-bit time_t stat with error checking. + 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/>. */ + +/* NB: Non-standard file name to avoid sysdeps override for xstat. */ + +#include <support/check.h> +#include <support/xunistd.h> +#include <sys/stat.h> + +#if __TIMESIZE != 64 +void +xfstat_time64 (int fd, struct __stat64_t64 *result) +{ + if (__fstat64_time64 (fd, result) != 0) + FAIL_EXIT1 ("__fstat64_time64 (%d): %m", fd); +} +#endif diff --git a/support/support-xstat-time64.c b/support/support-xstat-time64.c new file mode 100644 index 0000000000..7d0194b98a --- /dev/null +++ b/support/support-xstat-time64.c @@ -0,0 +1,32 @@ +/* 64-bit time_t stat with error checking. + 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/>. */ + +/* NB: Non-standard file name to avoid sysdeps override for xstat. */ + +#include <support/check.h> +#include <support/xunistd.h> +#include <sys/stat.h> + +#if __TIMESIZE != 64 +void +xstat_time64 (const char *path, struct __stat64_t64 *result) +{ + if (__stat64_time64 (path, result) != 0) + FAIL_EXIT1 ("__stat64_time64 (\"%s\"): %m", path); +} +#endif diff --git a/support/xlstat-time64.c b/support/xlstat-time64.c new file mode 100644 index 0000000000..ef4d922635 --- /dev/null +++ b/support/xlstat-time64.c @@ -0,0 +1,32 @@ +/* 64-bit time_t stat with error checking. + 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/>. */ + +/* NB: Non-standard file name to avoid sysdeps override for xstat. */ + +#include <support/check.h> +#include <support/xunistd.h> +#include <sys/stat.h> + +#if __TIMESIZE != 64 +void +xlstat_time64 (const char *path, struct __stat64_t64 *result) +{ + if (__lstat64_time64 (path, result) != 0) + FAIL_EXIT1 ("__lstat64_time64 (\"%s\"): %m", path); +} +#endif diff --git a/support/xunistd.h b/support/xunistd.h index c642588c29..e4ade65c85 100644 --- a/support/xunistd.h +++ b/support/xunistd.h @@ -24,6 +24,7 @@ #include <sys/cdefs.h> #include <sys/types.h> +#include <sys/stat.h> #include <unistd.h> __BEGIN_DECLS @@ -35,9 +36,21 @@ pid_t xwaitpid (pid_t, int *status, int flags); void xpipe (int[2]); void xdup2 (int, int); int xopen (const char *path, int flags, mode_t); +#ifndef __USE_TIME_BITS64 +# ifdef __USE_FILE_OFFSET64 +void xstat (const char *path, struct stat *); +void xlstat (const char *path, struct stat *); +void xfstat (int fd, struct stat *); +# else void xstat (const char *path, struct stat64 *); void xlstat (const char *path, struct stat64 *); void xfstat (int fd, struct stat64 *); +# endif +#else +void __REDIRECT (xstat, (const char *path, struct stat *), xstat_time64); +void __REDIRECT (xlstat, (const char *path, struct stat *), xlstat_time64); +void __REDIRECT (xfstat, (int fd, struct stat *), xfstat_time64); +#endif void xmkdir (const char *path, mode_t); void xchroot (const char *path); void xunlink (const char *path);