diff mbox series

[1/2] io: Remove xstat implementations

Message ID 20201202193938.2345469-1-adhemerval.zanella@linaro.org
State New
Headers show
Series [1/2] io: Remove xstat implementations | expand

Commit Message

Adhemerval Zanella Dec. 2, 2020, 7:39 p.m. UTC
With xstat wrapper functions removed (8ed005daf0), the stat functions
are now properly exported, and version is done using symbols versioning
instead of the extra _STAT_* argument.
---
 io/Makefile                      |  3 +-
 io/fstat.c                       |  3 +-
 io/fstat64.c                     |  3 +-
 io/fstatat.c                     | 18 ++++++++++--
 io/fstatat64.c                   | 18 ++++++++++--
 io/fxstat.c                      | 48 -------------------------------
 io/fxstat64.c                    | 47 ------------------------------
 io/fxstatat.c                    | 48 -------------------------------
 io/fxstatat64.c                  | 49 --------------------------------
 io/lstat.c                       |  3 +-
 io/lstat64.c                     |  3 +-
 io/lxstat.c                      | 26 -----------------
 io/lxstat64.c                    | 30 -------------------
 io/stat.c                        |  3 +-
 io/stat64.c                      |  3 +-
 io/xstat.c                       | 37 ------------------------
 io/xstat64.c                     | 36 -----------------------
 sysdeps/mach/hurd/Makefile       |  4 ++-
 sysdeps/unix/sysv/linux/Makefile |  4 ++-
 19 files changed, 45 insertions(+), 341 deletions(-)
 delete mode 100644 io/fxstat.c
 delete mode 100644 io/fxstat64.c
 delete mode 100644 io/fxstatat.c
 delete mode 100644 io/fxstatat64.c
 delete mode 100644 io/lxstat.c
 delete mode 100644 io/lxstat64.c
 delete mode 100644 io/xstat.c
 delete mode 100644 io/xstat64.c

Comments

Adhemerval Zanella Dec. 28, 2020, 7:10 p.m. UTC | #1
If no one opposes it, I will commit this.

On 02/12/2020 16:39, Adhemerval Zanella wrote:
> With xstat wrapper functions removed (8ed005daf0), the stat functions
> are now properly exported, and version is done using symbols versioning
> instead of the extra _STAT_* argument.
> ---
>  io/Makefile                      |  3 +-
>  io/fstat.c                       |  3 +-
>  io/fstat64.c                     |  3 +-
>  io/fstatat.c                     | 18 ++++++++++--
>  io/fstatat64.c                   | 18 ++++++++++--
>  io/fxstat.c                      | 48 -------------------------------
>  io/fxstat64.c                    | 47 ------------------------------
>  io/fxstatat.c                    | 48 -------------------------------
>  io/fxstatat64.c                  | 49 --------------------------------
>  io/lstat.c                       |  3 +-
>  io/lstat64.c                     |  3 +-
>  io/lxstat.c                      | 26 -----------------
>  io/lxstat64.c                    | 30 -------------------
>  io/stat.c                        |  3 +-
>  io/stat64.c                      |  3 +-
>  io/xstat.c                       | 37 ------------------------
>  io/xstat64.c                     | 36 -----------------------
>  sysdeps/mach/hurd/Makefile       |  4 ++-
>  sysdeps/unix/sysv/linux/Makefile |  4 ++-
>  19 files changed, 45 insertions(+), 341 deletions(-)
>  delete mode 100644 io/fxstat.c
>  delete mode 100644 io/fxstat64.c
>  delete mode 100644 io/fxstatat.c
>  delete mode 100644 io/fxstatat64.c
>  delete mode 100644 io/lxstat.c
>  delete mode 100644 io/lxstat64.c
>  delete mode 100644 io/xstat.c
>  delete mode 100644 io/xstat64.c
> 
> diff --git a/io/Makefile b/io/Makefile
> index 33f5b0b867..887a989c03 100644
> --- a/io/Makefile
> +++ b/io/Makefile
> @@ -33,9 +33,8 @@ routines :=								\
>  	utime								\
>  	mkfifo mkfifoat							\
>  	stat fstat lstat stat64 fstat64 lstat64 fstatat fstatat64	\
> -	xstat fxstat lxstat xstat64 fxstat64 lxstat64 statx		\
> +	statx								\
>  	mknod mknodat xmknod xmknodat					\
> -	fxstatat fxstatat64						\
>  	statfs fstatfs statfs64 fstatfs64				\
>  	statvfs fstatvfs statvfs64 fstatvfs64				\
>  	umask chmod fchmod lchmod fchmodat				\
> diff --git a/io/fstat.c b/io/fstat.c
> index c392ebe35b..065e6f8f68 100644
> --- a/io/fstat.c
> +++ b/io/fstat.c
> @@ -17,11 +17,10 @@
>  
>  #include <sys/stat.h>
>  
> -#undef __fstat
>  int
>  __fstat (int fd, struct stat *buf)
>  {
> -  return __fxstat (_STAT_VER, fd, buf);
> +  return __fstatat (fd, "", buf, AT_EMPTY_PATH);
>  }
>  
>  weak_alias (__fstat, fstat)
> diff --git a/io/fstat64.c b/io/fstat64.c
> index 8f9a6a4ad0..505123ee0e 100644
> --- a/io/fstat64.c
> +++ b/io/fstat64.c
> @@ -17,11 +17,10 @@
>  
>  #include <sys/stat.h>
>  
> -#undef __fstat64
>  int
>  __fstat64 (int fd, struct stat64 *buf)
>  {
> -  return __fxstat64 (_STAT_VER, fd, buf);
> +  return __fstatat64 (fd, "", buf, AT_EMPTY_PATH);
>  }
>  hidden_def (__fstat64)
>  weak_alias (__fstat64, fstat64)
> diff --git a/io/fstatat.c b/io/fstatat.c
> index 19242b7d5d..07f4afb996 100644
> --- a/io/fstatat.c
> +++ b/io/fstatat.c
> @@ -16,12 +16,26 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <sys/stat.h>
> +#include <errno.h>
>  
> -#undef __fstatat
>  int
>  __fstatat (int fd, const char *file, struct stat *buf, int flag)
>  {
> -  return __fxstatat (_STAT_VER, fd, file, buf, flag);
> +  if (fd < 0 && fd != AT_FDCWD)
> +    {
> +      __set_errno (EBADF);
> +      return -1;
> +    }
> +  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> +    {
> +      __set_errno (EINVAL);
> +      return -1;
> +    }
> +
> +  __set_errno (ENOSYS);
> +  return -1;
>  }
>  
>  weak_alias (__fstatat, fstatat)
> +
> +stub_warning (fstatat)
> diff --git a/io/fstatat64.c b/io/fstatat64.c
> index 0e0312fd19..3b5a7528b7 100644
> --- a/io/fstatat64.c
> +++ b/io/fstatat64.c
> @@ -16,12 +16,26 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <sys/stat.h>
> +#include <errno.h>
>  
> -#undef __fstatat64
>  int
>  __fstatat64 (int fd, const char *file, struct stat64 *buf, int flag)
>  {
> -  return __fxstatat64 (_STAT_VER, fd, file, buf, flag);
> +  if (fd < 0 && fd != AT_FDCWD)
> +    {
> +      __set_errno (EBADF);
> +      return -1;
> +    }
> +  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> +    {
> +      __set_errno (EINVAL);
> +      return -1;
> +    }
> +
> +  __set_errno (ENOSYS);
> +  return -1;
>  }
>  hidden_def (__fstatat64)
>  weak_alias (__fstatat64, fstatat64)
> +
> +stub_warning (fstatat64)
> diff --git a/io/fxstat.c b/io/fxstat.c
> deleted file mode 100644
> index 2ebb34c0be..0000000000
> --- a/io/fxstat.c
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -/* Copyright (C) 1991-2020 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 <errno.h>
> -#include <stddef.h>
> -#include <sys/stat.h>
> -
> -/* Get information about the file descriptor FD in BUF.  */
> -int
> -__fxstat (int vers, int fd, struct stat *buf)
> -{
> -  if (vers != _STAT_VER)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  if (fd < 0)
> -    {
> -      __set_errno (EBADF);
> -      return -1;
> -    }
> -  else if (buf == NULL)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  __set_errno (ENOSYS);
> -  return -1;
> -}
> -stub_warning (fstat)
> -hidden_def (__fxstat)
> -weak_alias (__fxstat, _fxstat)
> diff --git a/io/fxstat64.c b/io/fxstat64.c
> deleted file mode 100644
> index 6059ed0ee3..0000000000
> --- a/io/fxstat64.c
> +++ /dev/null
> @@ -1,47 +0,0 @@
> -/* Copyright (C) 1991-2020 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 <errno.h>
> -#include <stddef.h>
> -#include <sys/stat.h>
> -
> -/* Get information about the file descriptor FD in BUF.  */
> -int
> -__fxstat64 (int vers, int fd, struct stat64 *buf)
> -{
> -  if (vers != _STAT_VER)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  if (fd < 0)
> -    {
> -      __set_errno (EBADF);
> -      return -1;
> -    }
> -  else if (buf == NULL)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  __set_errno (ENOSYS);
> -  return -1;
> -}
> -hidden_def (__fxstat64)
> -stub_warning (fstat64)
> diff --git a/io/fxstatat.c b/io/fxstatat.c
> deleted file mode 100644
> index aac9d31143..0000000000
> --- a/io/fxstatat.c
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -/* Copyright (C) 2005-2020 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 <errno.h>
> -#include <fcntl.h>
> -#include <stddef.h>
> -#include <sys/stat.h>
> -
> -/* Get information about the file descriptor FD in BUF.  */
> -int
> -__fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag)
> -{
> -  if (vers != _STAT_VER)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  if (fd < 0 && fd != AT_FDCWD)
> -    {
> -      __set_errno (EBADF);
> -      return -1;
> -    }
> -  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  __set_errno (ENOSYS);
> -  return -1;
> -}
> -libc_hidden_def (__fxstatat)
> -stub_warning (fstatat)
> diff --git a/io/fxstatat64.c b/io/fxstatat64.c
> deleted file mode 100644
> index 5e3aa382c4..0000000000
> --- a/io/fxstatat64.c
> +++ /dev/null
> @@ -1,49 +0,0 @@
> -/* Copyright (C) 2005-2020 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 <errno.h>
> -#include <fcntl.h>
> -#include <stddef.h>
> -#include <sys/stat.h>
> -
> -/* Get information about the file descriptor FD in BUF.  */
> -int
> -__fxstatat64 (int vers, int fd, const char *filename, struct stat64 *buf,
> -	      int flag)
> -{
> -  if (vers != _STAT_VER)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  if (fd < 0 && fd != AT_FDCWD)
> -    {
> -      __set_errno (EBADF);
> -      return -1;
> -    }
> -  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  __set_errno (ENOSYS);
> -  return -1;
> -}
> -libc_hidden_def (__fxstatat64)
> -stub_warning (fstatat64)
> diff --git a/io/lstat.c b/io/lstat.c
> index bdd60bedb6..abb4a14831 100644
> --- a/io/lstat.c
> +++ b/io/lstat.c
> @@ -17,11 +17,10 @@
>  
>  #include <sys/stat.h>
>  
> -#undef __lstat
>  int
>  __lstat (const char *file, struct stat *buf)
>  {
> -  return __lxstat (_STAT_VER, file, buf);
> +  return __fstatat (AT_FDCWD, file, buf, AT_SYMLINK_NOFOLLOW);
>  }
>  
>  weak_alias (__lstat, lstat)
> diff --git a/io/lstat64.c b/io/lstat64.c
> index 0e571f6075..d244e793b2 100644
> --- a/io/lstat64.c
> +++ b/io/lstat64.c
> @@ -17,11 +17,10 @@
>  
>  #include <sys/stat.h>
>  
> -#undef __lstat64
>  int
>  __lstat64 (const char *file, struct stat64 *buf)
>  {
> -  return __lxstat64 (_STAT_VER, file, buf);
> +  return __fstatat64 (AT_FDCWD, file, buf, AT_SYMLINK_NOFOLLOW);
>  }
>  hidden_def (__lstat64)
>  weak_alias (__lstat64, lstat64)
> diff --git a/io/lxstat.c b/io/lxstat.c
> deleted file mode 100644
> index e38336e674..0000000000
> --- a/io/lxstat.c
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -/* Copyright (C) 1991-2020 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>
> -
> -int
> -__lxstat (int version, const char *file, struct stat *buf)
> -{
> -  return __xstat (version, file, buf);
> -}
> -hidden_def (__lxstat)
> -weak_alias (__lxstat, _lxstat)
> diff --git a/io/lxstat64.c b/io/lxstat64.c
> deleted file mode 100644
> index 97dae35efe..0000000000
> --- a/io/lxstat64.c
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -/* lxstat64 -- get file metadata, not following symlinks.  Stub version.
> -   Copyright (C) 1991-2020 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 <errno.h>
> -#include <stddef.h>
> -#include <sys/stat.h>
> -
> -/* Get file information about FILE in BUF.
> -   If FILE is a symbolic link, do not follow it.  */
> -int
> -__lxstat64 (int vers, const char *file, struct stat64 *buf)
> -{
> -  return __xstat64 (vers, file, buf);
> -}
> -hidden_def (__lxstat64)
> diff --git a/io/stat.c b/io/stat.c
> index 78dbfb3b8f..9c0a8b0baf 100644
> --- a/io/stat.c
> +++ b/io/stat.c
> @@ -17,11 +17,10 @@
>  
>  #include <sys/stat.h>
>  
> -#undef __stat
>  int
>  __stat (const char *file, struct stat *buf)
>  {
> -  return __xstat (_STAT_VER, file, buf);
> +  return __fstatat (AT_FDCWD, file, buf, 0);
>  }
>  
>  weak_alias (__stat, stat)
> diff --git a/io/stat64.c b/io/stat64.c
> index 102dcc5d5a..ea47e13754 100644
> --- a/io/stat64.c
> +++ b/io/stat64.c
> @@ -17,11 +17,10 @@
>  
>  #include <sys/stat.h>
>  
> -#undef __stat64
>  int
>  __stat64 (const char *file, struct stat64 *buf)
>  {
> -  return __xstat64 (_STAT_VER, file, buf);
> +  return __fstatat64 (AT_FDCWD, file, buf, 0);
>  }
>  hidden_def (__stat64)
>  weak_alias (__stat64, stat64)
> diff --git a/io/xstat.c b/io/xstat.c
> deleted file mode 100644
> index 25edcf8b45..0000000000
> --- a/io/xstat.c
> +++ /dev/null
> @@ -1,37 +0,0 @@
> -/* Copyright (C) 1991-2020 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 <errno.h>
> -#include <sys/stat.h>
> -#include <stddef.h>
> -
> -/* Get file information about FILE in BUF.  */
> -int
> -__xstat (int vers, const char *file, struct stat *buf)
> -{
> -  if (vers != _STAT_VER || file == NULL || buf == NULL)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  __set_errno (ENOSYS);
> -  return -1;
> -}
> -hidden_def (__xstat)
> -stub_warning (stat)
> -weak_alias (__xstat, _xstat)
> diff --git a/io/xstat64.c b/io/xstat64.c
> deleted file mode 100644
> index 898b574ee5..0000000000
> --- a/io/xstat64.c
> +++ /dev/null
> @@ -1,36 +0,0 @@
> -/* Copyright (C) 1991-2020 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 <errno.h>
> -#include <sys/stat.h>
> -#include <stddef.h>
> -
> -/* Get file information about FILE in BUF.  */
> -int
> -__xstat64 (int vers, const char *file, struct stat64 *buf)
> -{
> -  if (vers != _STAT_VER || file == NULL || buf == NULL)
> -    {
> -      __set_errno (EINVAL);
> -      return -1;
> -    }
> -
> -  __set_errno (ENOSYS);
> -  return -1;
> -}
> -hidden_def (__xstat64)
> -stub_warning (stat64)
> diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
> index 9c53db3783..571277cf7f 100644
> --- a/sysdeps/mach/hurd/Makefile
> +++ b/sysdeps/mach/hurd/Makefile
> @@ -199,7 +199,9 @@ ifeq (io, $(subdir))
>  sysdep_routines += f_setlk close_nocancel close_nocancel_nostatus \
>  		   fcntl_nocancel open_nocancel openat_nocancel read_nocancel \
>  		   pread64_nocancel write_nocancel pwrite64_nocancel \
> -		   wait4_nocancel
> +		   wait4_nocancel \
> +		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
> +		   fxstatat fxstatat64
>  endif
>  
>  ifeq (misc, $(subdir))
> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> index 09604e128b..899b6c9c77 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -61,7 +61,9 @@ sysdep_routines += adjtimex clone umount umount2 readahead sysctl \
>  		   open_by_handle_at mlock2 pkey_mprotect pkey_set pkey_get \
>  		   timerfd_gettime timerfd_settime prctl \
>  		   process_vm_readv process_vm_writev clock_adjtime \
> -		   time64-support pselect32
> +		   time64-support pselect32 \
> +		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
> +		   fxstatat fxstatat64
>  
>  CFLAGS-gethostid.c = -fexceptions
>  CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables
>
Lukasz Majewski Dec. 29, 2020, 10:17 a.m. UTC | #2
Hi Adhemerval,

> If no one opposes it, I will commit this.
> 
> On 02/12/2020 16:39, Adhemerval Zanella wrote:
> > With xstat wrapper functions removed (8ed005daf0), the stat
> > functions are now properly exported, and version is done using
> > symbols versioning instead of the extra _STAT_* argument.
> > ---
> >  io/Makefile                      |  3 +-
> >  io/fstat.c                       |  3 +-
> >  io/fstat64.c                     |  3 +-
> >  io/fstatat.c                     | 18 ++++++++++--
> >  io/fstatat64.c                   | 18 ++++++++++--
> >  io/fxstat.c                      | 48
> > ------------------------------- io/fxstat64.c                    |
> > 47 ------------------------------ io/fxstatat.c
> > | 48 ------------------------------- io/fxstatat64.c
> >   | 49 -------------------------------- io/lstat.c
> >      |  3 +- io/lstat64.c                     |  3 +-
> >  io/lxstat.c                      | 26 -----------------
> >  io/lxstat64.c                    | 30 -------------------
> >  io/stat.c                        |  3 +-
> >  io/stat64.c                      |  3 +-
> >  io/xstat.c                       | 37 ------------------------
> >  io/xstat64.c                     | 36 -----------------------
> >  sysdeps/mach/hurd/Makefile       |  4 ++-
> >  sysdeps/unix/sysv/linux/Makefile |  4 ++-
> >  19 files changed, 45 insertions(+), 341 deletions(-)
> >  delete mode 100644 io/fxstat.c
> >  delete mode 100644 io/fxstat64.c
> >  delete mode 100644 io/fxstatat.c
> >  delete mode 100644 io/fxstatat64.c
> >  delete mode 100644 io/lxstat.c
> >  delete mode 100644 io/lxstat64.c
> >  delete mode 100644 io/xstat.c
> >  delete mode 100644 io/xstat64.c
> > 
> > diff --git a/io/Makefile b/io/Makefile
> > index 33f5b0b867..887a989c03 100644
> > --- a/io/Makefile
> > +++ b/io/Makefile
> > @@ -33,9 +33,8 @@ routines :=
> > 				\ utime
> > 					\ mkfifo mkfifoat
> > 						\ stat fstat lstat
> > stat64 fstat64 lstat64 fstatat fstatat64	\
> > -	xstat fxstat lxstat xstat64 fxstat64 lxstat64 statx
> > 	\
> > +	statx
> > 		\ mknod mknodat xmknod xmknodat
> > 			\
> > -	fxstatat fxstatat64
> > 	\ statfs fstatfs statfs64 fstatfs64
> > 	\ statvfs fstatvfs statvfs64 fstatvfs64
> > 		\ umask chmod fchmod lchmod fchmodat
> > 		\ diff --git a/io/fstat.c b/io/fstat.c
> > index c392ebe35b..065e6f8f68 100644
> > --- a/io/fstat.c
> > +++ b/io/fstat.c
> > @@ -17,11 +17,10 @@
> >  
> >  #include <sys/stat.h>
> >  
> > -#undef __fstat
> >  int
> >  __fstat (int fd, struct stat *buf)
> >  {
> > -  return __fxstat (_STAT_VER, fd, buf);
> > +  return __fstatat (fd, "", buf, AT_EMPTY_PATH);
> >  }
> >  
> >  weak_alias (__fstat, fstat)
> > diff --git a/io/fstat64.c b/io/fstat64.c
> > index 8f9a6a4ad0..505123ee0e 100644
> > --- a/io/fstat64.c
> > +++ b/io/fstat64.c
> > @@ -17,11 +17,10 @@
> >  
> >  #include <sys/stat.h>
> >  
> > -#undef __fstat64
> >  int
> >  __fstat64 (int fd, struct stat64 *buf)
> >  {
> > -  return __fxstat64 (_STAT_VER, fd, buf);
> > +  return __fstatat64 (fd, "", buf, AT_EMPTY_PATH);
> >  }
> >  hidden_def (__fstat64)
> >  weak_alias (__fstat64, fstat64)
> > diff --git a/io/fstatat.c b/io/fstatat.c
> > index 19242b7d5d..07f4afb996 100644
> > --- a/io/fstatat.c
> > +++ b/io/fstatat.c
> > @@ -16,12 +16,26 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sys/stat.h>
> > +#include <errno.h>
> >  
> > -#undef __fstatat
> >  int
> >  __fstatat (int fd, const char *file, struct stat *buf, int flag)
> >  {
> > -  return __fxstatat (_STAT_VER, fd, file, buf, flag);
> > +  if (fd < 0 && fd != AT_FDCWD)
> > +    {
> > +      __set_errno (EBADF);
> > +      return -1;
> > +    }
> > +  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> > +    {
> > +      __set_errno (EINVAL);
> > +      return -1;
> > +    }
> > +
> > +  __set_errno (ENOSYS);
> > +  return -1;
> >  }
> >  
> >  weak_alias (__fstatat, fstatat)
> > +
> > +stub_warning (fstatat)
> > diff --git a/io/fstatat64.c b/io/fstatat64.c
> > index 0e0312fd19..3b5a7528b7 100644
> > --- a/io/fstatat64.c
> > +++ b/io/fstatat64.c
> > @@ -16,12 +16,26 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sys/stat.h>
> > +#include <errno.h>
> >  
> > -#undef __fstatat64
> >  int
> >  __fstatat64 (int fd, const char *file, struct stat64 *buf, int
> > flag) {
> > -  return __fxstatat64 (_STAT_VER, fd, file, buf, flag);
> > +  if (fd < 0 && fd != AT_FDCWD)
> > +    {
> > +      __set_errno (EBADF);
> > +      return -1;
> > +    }
> > +  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> > +    {
> > +      __set_errno (EINVAL);
> > +      return -1;
> > +    }
> > +
> > +  __set_errno (ENOSYS);
> > +  return -1;
> >  }
> >  hidden_def (__fstatat64)
> >  weak_alias (__fstatat64, fstatat64)
> > +
> > +stub_warning (fstatat64)
> > diff --git a/io/fxstat.c b/io/fxstat.c
> > deleted file mode 100644
> > index 2ebb34c0be..0000000000
> > --- a/io/fxstat.c
> > +++ /dev/null
> > @@ -1,48 +0,0 @@
> > -/* Copyright (C) 1991-2020 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 <errno.h>
> > -#include <stddef.h>
> > -#include <sys/stat.h>
> > -
> > -/* Get information about the file descriptor FD in BUF.  */
> > -int
> > -__fxstat (int vers, int fd, struct stat *buf)
> > -{
> > -  if (vers != _STAT_VER)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  if (fd < 0)
> > -    {
> > -      __set_errno (EBADF);
> > -      return -1;
> > -    }
> > -  else if (buf == NULL)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  __set_errno (ENOSYS);
> > -  return -1;
> > -}
> > -stub_warning (fstat)
> > -hidden_def (__fxstat)
> > -weak_alias (__fxstat, _fxstat)
> > diff --git a/io/fxstat64.c b/io/fxstat64.c
> > deleted file mode 100644
> > index 6059ed0ee3..0000000000
> > --- a/io/fxstat64.c
> > +++ /dev/null
> > @@ -1,47 +0,0 @@
> > -/* Copyright (C) 1991-2020 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 <errno.h>
> > -#include <stddef.h>
> > -#include <sys/stat.h>
> > -
> > -/* Get information about the file descriptor FD in BUF.  */
> > -int
> > -__fxstat64 (int vers, int fd, struct stat64 *buf)
> > -{
> > -  if (vers != _STAT_VER)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  if (fd < 0)
> > -    {
> > -      __set_errno (EBADF);
> > -      return -1;
> > -    }
> > -  else if (buf == NULL)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  __set_errno (ENOSYS);
> > -  return -1;
> > -}
> > -hidden_def (__fxstat64)
> > -stub_warning (fstat64)
> > diff --git a/io/fxstatat.c b/io/fxstatat.c
> > deleted file mode 100644
> > index aac9d31143..0000000000
> > --- a/io/fxstatat.c
> > +++ /dev/null
> > @@ -1,48 +0,0 @@
> > -/* Copyright (C) 2005-2020 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 <errno.h>
> > -#include <fcntl.h>
> > -#include <stddef.h>
> > -#include <sys/stat.h>
> > -
> > -/* Get information about the file descriptor FD in BUF.  */
> > -int
> > -__fxstatat (int vers, int fd, const char *filename, struct stat
> > *buf, int flag) -{
> > -  if (vers != _STAT_VER)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  if (fd < 0 && fd != AT_FDCWD)
> > -    {
> > -      __set_errno (EBADF);
> > -      return -1;
> > -    }
> > -  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  __set_errno (ENOSYS);
> > -  return -1;
> > -}
> > -libc_hidden_def (__fxstatat)
> > -stub_warning (fstatat)
> > diff --git a/io/fxstatat64.c b/io/fxstatat64.c
> > deleted file mode 100644
> > index 5e3aa382c4..0000000000
> > --- a/io/fxstatat64.c
> > +++ /dev/null
> > @@ -1,49 +0,0 @@
> > -/* Copyright (C) 2005-2020 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 <errno.h>
> > -#include <fcntl.h>
> > -#include <stddef.h>
> > -#include <sys/stat.h>
> > -
> > -/* Get information about the file descriptor FD in BUF.  */
> > -int
> > -__fxstatat64 (int vers, int fd, const char *filename, struct
> > stat64 *buf,
> > -	      int flag)
> > -{
> > -  if (vers != _STAT_VER)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  if (fd < 0 && fd != AT_FDCWD)
> > -    {
> > -      __set_errno (EBADF);
> > -      return -1;
> > -    }
> > -  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  __set_errno (ENOSYS);
> > -  return -1;
> > -}
> > -libc_hidden_def (__fxstatat64)
> > -stub_warning (fstatat64)
> > diff --git a/io/lstat.c b/io/lstat.c
> > index bdd60bedb6..abb4a14831 100644
> > --- a/io/lstat.c
> > +++ b/io/lstat.c
> > @@ -17,11 +17,10 @@
> >  
> >  #include <sys/stat.h>
> >  
> > -#undef __lstat
> >  int
> >  __lstat (const char *file, struct stat *buf)
> >  {
> > -  return __lxstat (_STAT_VER, file, buf);
> > +  return __fstatat (AT_FDCWD, file, buf, AT_SYMLINK_NOFOLLOW);
> >  }
> >  
> >  weak_alias (__lstat, lstat)
> > diff --git a/io/lstat64.c b/io/lstat64.c
> > index 0e571f6075..d244e793b2 100644
> > --- a/io/lstat64.c
> > +++ b/io/lstat64.c
> > @@ -17,11 +17,10 @@
> >  
> >  #include <sys/stat.h>
> >  
> > -#undef __lstat64
> >  int
> >  __lstat64 (const char *file, struct stat64 *buf)
> >  {
> > -  return __lxstat64 (_STAT_VER, file, buf);
> > +  return __fstatat64 (AT_FDCWD, file, buf, AT_SYMLINK_NOFOLLOW);
> >  }
> >  hidden_def (__lstat64)
> >  weak_alias (__lstat64, lstat64)
> > diff --git a/io/lxstat.c b/io/lxstat.c
> > deleted file mode 100644
> > index e38336e674..0000000000
> > --- a/io/lxstat.c
> > +++ /dev/null
> > @@ -1,26 +0,0 @@
> > -/* Copyright (C) 1991-2020 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>
> > -
> > -int
> > -__lxstat (int version, const char *file, struct stat *buf)
> > -{
> > -  return __xstat (version, file, buf);
> > -}
> > -hidden_def (__lxstat)
> > -weak_alias (__lxstat, _lxstat)
> > diff --git a/io/lxstat64.c b/io/lxstat64.c
> > deleted file mode 100644
> > index 97dae35efe..0000000000
> > --- a/io/lxstat64.c
> > +++ /dev/null
> > @@ -1,30 +0,0 @@
> > -/* lxstat64 -- get file metadata, not following symlinks.  Stub
> > version.
> > -   Copyright (C) 1991-2020 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 <errno.h>
> > -#include <stddef.h>
> > -#include <sys/stat.h>
> > -
> > -/* Get file information about FILE in BUF.
> > -   If FILE is a symbolic link, do not follow it.  */
> > -int
> > -__lxstat64 (int vers, const char *file, struct stat64 *buf)
> > -{
> > -  return __xstat64 (vers, file, buf);
> > -}
> > -hidden_def (__lxstat64)
> > diff --git a/io/stat.c b/io/stat.c
> > index 78dbfb3b8f..9c0a8b0baf 100644
> > --- a/io/stat.c
> > +++ b/io/stat.c
> > @@ -17,11 +17,10 @@
> >  
> >  #include <sys/stat.h>
> >  
> > -#undef __stat
> >  int
> >  __stat (const char *file, struct stat *buf)
> >  {
> > -  return __xstat (_STAT_VER, file, buf);
> > +  return __fstatat (AT_FDCWD, file, buf, 0);
> >  }
> >  
> >  weak_alias (__stat, stat)
> > diff --git a/io/stat64.c b/io/stat64.c
> > index 102dcc5d5a..ea47e13754 100644
> > --- a/io/stat64.c
> > +++ b/io/stat64.c
> > @@ -17,11 +17,10 @@
> >  
> >  #include <sys/stat.h>
> >  
> > -#undef __stat64
> >  int
> >  __stat64 (const char *file, struct stat64 *buf)
> >  {
> > -  return __xstat64 (_STAT_VER, file, buf);
> > +  return __fstatat64 (AT_FDCWD, file, buf, 0);
> >  }
> >  hidden_def (__stat64)
> >  weak_alias (__stat64, stat64)
> > diff --git a/io/xstat.c b/io/xstat.c
> > deleted file mode 100644
> > index 25edcf8b45..0000000000
> > --- a/io/xstat.c
> > +++ /dev/null
> > @@ -1,37 +0,0 @@
> > -/* Copyright (C) 1991-2020 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 <errno.h>
> > -#include <sys/stat.h>
> > -#include <stddef.h>
> > -
> > -/* Get file information about FILE in BUF.  */
> > -int
> > -__xstat (int vers, const char *file, struct stat *buf)
> > -{
> > -  if (vers != _STAT_VER || file == NULL || buf == NULL)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  __set_errno (ENOSYS);
> > -  return -1;
> > -}
> > -hidden_def (__xstat)
> > -stub_warning (stat)
> > -weak_alias (__xstat, _xstat)
> > diff --git a/io/xstat64.c b/io/xstat64.c
> > deleted file mode 100644
> > index 898b574ee5..0000000000
> > --- a/io/xstat64.c
> > +++ /dev/null
> > @@ -1,36 +0,0 @@
> > -/* Copyright (C) 1991-2020 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 <errno.h>
> > -#include <sys/stat.h>
> > -#include <stddef.h>
> > -
> > -/* Get file information about FILE in BUF.  */
> > -int
> > -__xstat64 (int vers, const char *file, struct stat64 *buf)
> > -{
> > -  if (vers != _STAT_VER || file == NULL || buf == NULL)
> > -    {
> > -      __set_errno (EINVAL);
> > -      return -1;
> > -    }
> > -
> > -  __set_errno (ENOSYS);
> > -  return -1;
> > -}
> > -hidden_def (__xstat64)
> > -stub_warning (stat64)
> > diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
> > index 9c53db3783..571277cf7f 100644
> > --- a/sysdeps/mach/hurd/Makefile
> > +++ b/sysdeps/mach/hurd/Makefile
> > @@ -199,7 +199,9 @@ ifeq (io, $(subdir))
> >  sysdep_routines += f_setlk close_nocancel close_nocancel_nostatus \
> >  		   fcntl_nocancel open_nocancel openat_nocancel
> > read_nocancel \ pread64_nocancel write_nocancel pwrite64_nocancel \
> > -		   wait4_nocancel
> > +		   wait4_nocancel \
> > +		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
> > +		   fxstatat fxstatat64
> >  endif
> >  
> >  ifeq (misc, $(subdir))
> > diff --git a/sysdeps/unix/sysv/linux/Makefile
> > b/sysdeps/unix/sysv/linux/Makefile index 09604e128b..899b6c9c77
> > 100644 --- a/sysdeps/unix/sysv/linux/Makefile
> > +++ b/sysdeps/unix/sysv/linux/Makefile
> > @@ -61,7 +61,9 @@ sysdep_routines += adjtimex clone umount umount2
> > readahead sysctl \ open_by_handle_at mlock2 pkey_mprotect pkey_set
> > pkey_get \ timerfd_gettime timerfd_settime prctl \
> >  		   process_vm_readv process_vm_writev
> > clock_adjtime \
> > -		   time64-support pselect32
> > +		   time64-support pselect32 \
> > +		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
> > +		   fxstatat fxstatat64
> >  
> >  CFLAGS-gethostid.c = -fexceptions
> >  CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables
> >   

Reviewed-by: Lukasz Majewski <lukma@denx.de>


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
diff mbox series

Patch

diff --git a/io/Makefile b/io/Makefile
index 33f5b0b867..887a989c03 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -33,9 +33,8 @@  routines :=								\
 	utime								\
 	mkfifo mkfifoat							\
 	stat fstat lstat stat64 fstat64 lstat64 fstatat fstatat64	\
-	xstat fxstat lxstat xstat64 fxstat64 lxstat64 statx		\
+	statx								\
 	mknod mknodat xmknod xmknodat					\
-	fxstatat fxstatat64						\
 	statfs fstatfs statfs64 fstatfs64				\
 	statvfs fstatvfs statvfs64 fstatvfs64				\
 	umask chmod fchmod lchmod fchmodat				\
diff --git a/io/fstat.c b/io/fstat.c
index c392ebe35b..065e6f8f68 100644
--- a/io/fstat.c
+++ b/io/fstat.c
@@ -17,11 +17,10 @@ 
 
 #include <sys/stat.h>
 
-#undef __fstat
 int
 __fstat (int fd, struct stat *buf)
 {
-  return __fxstat (_STAT_VER, fd, buf);
+  return __fstatat (fd, "", buf, AT_EMPTY_PATH);
 }
 
 weak_alias (__fstat, fstat)
diff --git a/io/fstat64.c b/io/fstat64.c
index 8f9a6a4ad0..505123ee0e 100644
--- a/io/fstat64.c
+++ b/io/fstat64.c
@@ -17,11 +17,10 @@ 
 
 #include <sys/stat.h>
 
-#undef __fstat64
 int
 __fstat64 (int fd, struct stat64 *buf)
 {
-  return __fxstat64 (_STAT_VER, fd, buf);
+  return __fstatat64 (fd, "", buf, AT_EMPTY_PATH);
 }
 hidden_def (__fstat64)
 weak_alias (__fstat64, fstat64)
diff --git a/io/fstatat.c b/io/fstatat.c
index 19242b7d5d..07f4afb996 100644
--- a/io/fstatat.c
+++ b/io/fstatat.c
@@ -16,12 +16,26 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 #include <sys/stat.h>
+#include <errno.h>
 
-#undef __fstatat
 int
 __fstatat (int fd, const char *file, struct stat *buf, int flag)
 {
-  return __fxstatat (_STAT_VER, fd, file, buf, flag);
+  if (fd < 0 && fd != AT_FDCWD)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
 }
 
 weak_alias (__fstatat, fstatat)
+
+stub_warning (fstatat)
diff --git a/io/fstatat64.c b/io/fstatat64.c
index 0e0312fd19..3b5a7528b7 100644
--- a/io/fstatat64.c
+++ b/io/fstatat64.c
@@ -16,12 +16,26 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 #include <sys/stat.h>
+#include <errno.h>
 
-#undef __fstatat64
 int
 __fstatat64 (int fd, const char *file, struct stat64 *buf, int flag)
 {
-  return __fxstatat64 (_STAT_VER, fd, file, buf, flag);
+  if (fd < 0 && fd != AT_FDCWD)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
 }
 hidden_def (__fstatat64)
 weak_alias (__fstatat64, fstatat64)
+
+stub_warning (fstatat64)
diff --git a/io/fxstat.c b/io/fxstat.c
deleted file mode 100644
index 2ebb34c0be..0000000000
--- a/io/fxstat.c
+++ /dev/null
@@ -1,48 +0,0 @@ 
-/* Copyright (C) 1991-2020 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 <errno.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-/* Get information about the file descriptor FD in BUF.  */
-int
-__fxstat (int vers, int fd, struct stat *buf)
-{
-  if (vers != _STAT_VER)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  if (fd < 0)
-    {
-      __set_errno (EBADF);
-      return -1;
-    }
-  else if (buf == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-stub_warning (fstat)
-hidden_def (__fxstat)
-weak_alias (__fxstat, _fxstat)
diff --git a/io/fxstat64.c b/io/fxstat64.c
deleted file mode 100644
index 6059ed0ee3..0000000000
--- a/io/fxstat64.c
+++ /dev/null
@@ -1,47 +0,0 @@ 
-/* Copyright (C) 1991-2020 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 <errno.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-/* Get information about the file descriptor FD in BUF.  */
-int
-__fxstat64 (int vers, int fd, struct stat64 *buf)
-{
-  if (vers != _STAT_VER)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  if (fd < 0)
-    {
-      __set_errno (EBADF);
-      return -1;
-    }
-  else if (buf == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-hidden_def (__fxstat64)
-stub_warning (fstat64)
diff --git a/io/fxstatat.c b/io/fxstatat.c
deleted file mode 100644
index aac9d31143..0000000000
--- a/io/fxstatat.c
+++ /dev/null
@@ -1,48 +0,0 @@ 
-/* Copyright (C) 2005-2020 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 <errno.h>
-#include <fcntl.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-/* Get information about the file descriptor FD in BUF.  */
-int
-__fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag)
-{
-  if (vers != _STAT_VER)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  if (fd < 0 && fd != AT_FDCWD)
-    {
-      __set_errno (EBADF);
-      return -1;
-    }
-  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-libc_hidden_def (__fxstatat)
-stub_warning (fstatat)
diff --git a/io/fxstatat64.c b/io/fxstatat64.c
deleted file mode 100644
index 5e3aa382c4..0000000000
--- a/io/fxstatat64.c
+++ /dev/null
@@ -1,49 +0,0 @@ 
-/* Copyright (C) 2005-2020 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 <errno.h>
-#include <fcntl.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-/* Get information about the file descriptor FD in BUF.  */
-int
-__fxstatat64 (int vers, int fd, const char *filename, struct stat64 *buf,
-	      int flag)
-{
-  if (vers != _STAT_VER)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  if (fd < 0 && fd != AT_FDCWD)
-    {
-      __set_errno (EBADF);
-      return -1;
-    }
-  if (buf == NULL || (flag & ~AT_SYMLINK_NOFOLLOW) != 0)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-libc_hidden_def (__fxstatat64)
-stub_warning (fstatat64)
diff --git a/io/lstat.c b/io/lstat.c
index bdd60bedb6..abb4a14831 100644
--- a/io/lstat.c
+++ b/io/lstat.c
@@ -17,11 +17,10 @@ 
 
 #include <sys/stat.h>
 
-#undef __lstat
 int
 __lstat (const char *file, struct stat *buf)
 {
-  return __lxstat (_STAT_VER, file, buf);
+  return __fstatat (AT_FDCWD, file, buf, AT_SYMLINK_NOFOLLOW);
 }
 
 weak_alias (__lstat, lstat)
diff --git a/io/lstat64.c b/io/lstat64.c
index 0e571f6075..d244e793b2 100644
--- a/io/lstat64.c
+++ b/io/lstat64.c
@@ -17,11 +17,10 @@ 
 
 #include <sys/stat.h>
 
-#undef __lstat64
 int
 __lstat64 (const char *file, struct stat64 *buf)
 {
-  return __lxstat64 (_STAT_VER, file, buf);
+  return __fstatat64 (AT_FDCWD, file, buf, AT_SYMLINK_NOFOLLOW);
 }
 hidden_def (__lstat64)
 weak_alias (__lstat64, lstat64)
diff --git a/io/lxstat.c b/io/lxstat.c
deleted file mode 100644
index e38336e674..0000000000
--- a/io/lxstat.c
+++ /dev/null
@@ -1,26 +0,0 @@ 
-/* Copyright (C) 1991-2020 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>
-
-int
-__lxstat (int version, const char *file, struct stat *buf)
-{
-  return __xstat (version, file, buf);
-}
-hidden_def (__lxstat)
-weak_alias (__lxstat, _lxstat)
diff --git a/io/lxstat64.c b/io/lxstat64.c
deleted file mode 100644
index 97dae35efe..0000000000
--- a/io/lxstat64.c
+++ /dev/null
@@ -1,30 +0,0 @@ 
-/* lxstat64 -- get file metadata, not following symlinks.  Stub version.
-   Copyright (C) 1991-2020 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 <errno.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-/* Get file information about FILE in BUF.
-   If FILE is a symbolic link, do not follow it.  */
-int
-__lxstat64 (int vers, const char *file, struct stat64 *buf)
-{
-  return __xstat64 (vers, file, buf);
-}
-hidden_def (__lxstat64)
diff --git a/io/stat.c b/io/stat.c
index 78dbfb3b8f..9c0a8b0baf 100644
--- a/io/stat.c
+++ b/io/stat.c
@@ -17,11 +17,10 @@ 
 
 #include <sys/stat.h>
 
-#undef __stat
 int
 __stat (const char *file, struct stat *buf)
 {
-  return __xstat (_STAT_VER, file, buf);
+  return __fstatat (AT_FDCWD, file, buf, 0);
 }
 
 weak_alias (__stat, stat)
diff --git a/io/stat64.c b/io/stat64.c
index 102dcc5d5a..ea47e13754 100644
--- a/io/stat64.c
+++ b/io/stat64.c
@@ -17,11 +17,10 @@ 
 
 #include <sys/stat.h>
 
-#undef __stat64
 int
 __stat64 (const char *file, struct stat64 *buf)
 {
-  return __xstat64 (_STAT_VER, file, buf);
+  return __fstatat64 (AT_FDCWD, file, buf, 0);
 }
 hidden_def (__stat64)
 weak_alias (__stat64, stat64)
diff --git a/io/xstat.c b/io/xstat.c
deleted file mode 100644
index 25edcf8b45..0000000000
--- a/io/xstat.c
+++ /dev/null
@@ -1,37 +0,0 @@ 
-/* Copyright (C) 1991-2020 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 <errno.h>
-#include <sys/stat.h>
-#include <stddef.h>
-
-/* Get file information about FILE in BUF.  */
-int
-__xstat (int vers, const char *file, struct stat *buf)
-{
-  if (vers != _STAT_VER || file == NULL || buf == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-hidden_def (__xstat)
-stub_warning (stat)
-weak_alias (__xstat, _xstat)
diff --git a/io/xstat64.c b/io/xstat64.c
deleted file mode 100644
index 898b574ee5..0000000000
--- a/io/xstat64.c
+++ /dev/null
@@ -1,36 +0,0 @@ 
-/* Copyright (C) 1991-2020 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 <errno.h>
-#include <sys/stat.h>
-#include <stddef.h>
-
-/* Get file information about FILE in BUF.  */
-int
-__xstat64 (int vers, const char *file, struct stat64 *buf)
-{
-  if (vers != _STAT_VER || file == NULL || buf == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-hidden_def (__xstat64)
-stub_warning (stat64)
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 9c53db3783..571277cf7f 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -199,7 +199,9 @@  ifeq (io, $(subdir))
 sysdep_routines += f_setlk close_nocancel close_nocancel_nostatus \
 		   fcntl_nocancel open_nocancel openat_nocancel read_nocancel \
 		   pread64_nocancel write_nocancel pwrite64_nocancel \
-		   wait4_nocancel
+		   wait4_nocancel \
+		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
+		   fxstatat fxstatat64
 endif
 
 ifeq (misc, $(subdir))
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 09604e128b..899b6c9c77 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -61,7 +61,9 @@  sysdep_routines += adjtimex clone umount umount2 readahead sysctl \
 		   open_by_handle_at mlock2 pkey_mprotect pkey_set pkey_get \
 		   timerfd_gettime timerfd_settime prctl \
 		   process_vm_readv process_vm_writev clock_adjtime \
-		   time64-support pselect32
+		   time64-support pselect32 \
+		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
+		   fxstatat fxstatat64
 
 CFLAGS-gethostid.c = -fexceptions
 CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables