Deprecate ustat syscall interface

As for sysctl, ustat has been deprecated in favor of {f}statfs.  Also
some newer ports which uses generic interface builds a stub version that
returns ENOSYS.

This patch deprecates ustat interface by removing ustat.h related headers,
adding a compatibility symbol, and avoiding new ports to build and provide
the symbol.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also checked with a
check-abi on all affected ABIs.

	* NEWS: Add ustat.h deprecation entry.
	* bits/ustat.h: Remove file.
	* misc/sys/ustat.h: Likewise.
	* misc/ustat.h: Likewise.
	* sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
	* misc/Makefile (headers): Remove ustat.h and sys/ustat.h.
	* misc/ustat.c (__ustat): Rename to __old_ustat and export only in
	compatibility mode.
	* sysdeps/unix/sysv/linux/ustat.c (__ustat): Likewise.
	* sysdeps/unix/sysv/linux/mips/ustat.c: Define DEV_TO_KDEV and use
	generic Linux implementation.
This commit is contained in:
Adhemerval Zanella 2018-03-18 11:28:59 +08:00
parent dc115e1cdc
commit cf2478d53a
10 changed files with 93 additions and 134 deletions

View File

@ -1,3 +1,31 @@
2018-05-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* NEWS: Add ustat.h deprecation entry.
* bits/ustat.h: Remove file.
* misc/sys/ustat.h: Likewise.
* misc/ustat.h: Likewise.
* sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
* misc/Makefile (headers): Remove ustat.h and sys/ustat.h.
* misc/ustat.c (__ustat): Rename to __old_ustat and export only in
compatibility mode.
* sysdeps/unix/sysv/linux/ustat.c (__ustat): Likewise.
* sysdeps/unix/sysv/linux/mips/ustat.c: Define DEV_TO_KDEV and use
generic Linux implementation.
* NEWS: Add sysctl.h deprecation entry.
* include/sys/sysctl.h: Remove file.
* sysdeps/unix/sysv/linux/bits/sysctl.h: Likewise.
* sysdeps/unix/sysv/linux/generic/sysctl.c: Likewise.
* sysdeps/unix/sysv/linux/sys/sysctl.h: Likewise.
* sysdeps/unix/sysv/linux/x86/bits/sysctl.h: Likewise.
* manual/sysinfo.texi: Update sysctl documentation.
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Remove
bits/sysctl.
* sysdeps/unix/sysv/linux/arm/ioperm.c (sysctl_call): New function.
(init_iosys): Call syscall_call instead of sysctl.
* sysdeps/unix/sysv/linux/sysctl.c (__sysctl): Rename to __old_sysctl
and export only in compatibility mode.
2018-04-30 Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> 2018-04-30 Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* math/w_exp_compat.c: Replace hidden_def with libm_hidden_def.. * math/w_exp_compat.c: Replace hidden_def with libm_hidden_def..

4
NEWS
View File

@ -59,6 +59,10 @@ Deprecated and removed features, and other changes affecting compatibility:
* The tilegx*-*-linux-gnu configurations are no longer supported. * The tilegx*-*-linux-gnu configurations are no longer supported.
* The obsolete function ustat is no longer available to newly linked
binaries; the headers <ustat.h> and <sys/ustat.h> have been removed. This
function has been deprecated in favor of fstatfs and statfs.
Changes to build and runtime requirements: Changes to build and runtime requirements:
[Add changes to build and runtime requirements here] [Add changes to build and runtime requirements here]

View File

@ -1,30 +0,0 @@
/* Copyright (C) 1997-2018 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
<http://www.gnu.org/licenses/>. */
#ifndef _SYS_USTAT_H
# error "Never include <bits/ustat.h> directly; use <sys/ustat.h> instead."
#endif
#include <sys/types.h>
struct ustat
{
__daddr_t f_tfree; /* Number of free blocks. */
__ino_t f_tinode; /* Number of free inodes. */
char f_fname[6];
char f_fpack[6];
};

View File

@ -31,7 +31,7 @@ headers := sys/uio.h bits/uio-ext.h bits/uio_lim.h \
sys/mman.h sys/param.h bits/param.h \ sys/mman.h sys/param.h bits/param.h \
fstab.h mntent.h search.h err.h error.h \ fstab.h mntent.h search.h err.h error.h \
sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \ sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \
sys/select.h ustat.h sys/ustat.h bits/ustat.h sys/sysinfo.h \ sys/select.h sys/sysinfo.h \
regexp.h bits/select.h bits/mman.h sys/xattr.h \ regexp.h bits/select.h bits/mman.h sys/xattr.h \
syslog.h sys/syslog.h \ syslog.h sys/syslog.h \
bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h \ bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h \

View File

@ -1,37 +0,0 @@
/* Header describing obsolete `ustat' interface.
Copyright (C) 1996-2018 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
<http://www.gnu.org/licenses/>. */
/*
* This interface is obsolete. Use <sys/statfs.h> instead.
*/
#ifndef _SYS_USTAT_H
#define _SYS_USTAT_H 1
#include <features.h>
#include <sys/types.h>
#include <bits/ustat.h>
__BEGIN_DECLS
extern int ustat (__dev_t __dev, struct ustat *__ubuf) __THROW;
__END_DECLS
#endif /* sys/ustat.h */

View File

@ -16,14 +16,28 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <unistd.h> #include <shlib-compat.h>
#include <errno.h>
#include <sys/ustat.h> /* This deprecated syscall is no longer used (replaced with {f}statfs). */
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)
# include <unistd.h>
# include <errno.h>
struct ustat
{
__daddr_t f_tfree; /* Number of free blocks. */
__ino_t f_tinode; /* Number of free inodes. */
char f_fname[6];
char f_fpack[6];
};
int int
ustat (dev_t dev, struct ustat *ust) __old_ustat (dev_t dev, struct ustat *ust)
{ {
__set_errno (ENOSYS); __set_errno (ENOSYS);
return -1; return -1;
} }
stub_warning (ustat) stub_warning (ustat)
compat_symbol (libc, __old_ustat, ustat, GLIBC_2_0);
#endif

View File

@ -1 +0,0 @@
#include <sys/ustat.h>

View File

@ -1,32 +0,0 @@
/* Copyright (C) 2011-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
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
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <sys/ustat.h>
#include <sysdep.h>
#include <sys/syscall.h>
/* This deprecated syscall is no longer used (replaced with fstat). */
int
ustat (dev_t dev, struct ustat *ubuf)
{
__set_errno (ENOSYS);
return -1;
}
stub_warning (ustat)

View File

@ -16,20 +16,13 @@
License along with the GNU C Library. If not, see License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <sys/ustat.h>
#include <sys/sysmacros.h> #include <sys/sysmacros.h>
#include <sysdep.h> #define DEV_TO_KDEV(__dev) \
#include <sys/syscall.h> ({ \
unsigned long k_dev; \
k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff); \
k_dev; \
})
int #include <sysdeps/unix/sysv/linux/ustat.c>
ustat (dev_t dev, struct ustat *ubuf)
{
unsigned long k_dev;
/* We must convert the value to dev_t type used by the kernel. */
k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);
return INLINE_SYSCALL (ustat, 2, k_dev, ubuf);
}

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1997-2018 Free Software Foundation, Inc. /* Get filesystem statistics (deprecated). Linux version.
Copyright (C) 1997-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -16,22 +17,41 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <errno.h> #include <shlib-compat.h>
#include <sys/ustat.h>
#include <sys/sysmacros.h>
#include <sysdep.h> /* This deprecated syscall is no longer used (replaced with {f}statfs). */
#include <sys/syscall.h> #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)
# include <sysdep.h>
# include <errno.h>
# ifndef DEV_TO_KDEV
# define DEV_TO_KDEV(__dev) \
({ \
unsigned long long int k_dev; \
k_dev = dev & ((1ULL << 32) - 1); \
if (k_dev != dev) \
return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); \
(unsigned int) k_dev; \
})
# endif
struct ustat
{
__daddr_t f_tfree; /* Number of free blocks. */
__ino_t f_tinode; /* Number of free inodes. */
char f_fname[6];
char f_fpack[6];
};
int int
ustat (dev_t dev, struct ustat *ubuf) __old_ustat (dev_t dev, struct ustat *ubuf)
{ {
unsigned long long int k_dev; # ifdef __NR_ustat
return INLINE_SYSCALL_CALL (ustat, DEV_TO_KDEV (dev), ubuf);
/* We must convert the value to dev_t type used by the kernel. */ # else
k_dev = dev & ((1ULL << 32) - 1); return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOSYS);
if (k_dev != dev) # endif
return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
return INLINE_SYSCALL (ustat, 2, (unsigned int) k_dev, ubuf);
} }
compat_symbol (libc, __old_ustat, ustat, GLIBC_2_0);
#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28) */