io: Remove xmknod{at} implementations

With xmknod wrapper functions removed (589260cef8), the mknod functions
are now properly exported, and version is done using symbols versioning
instead of the extra _MKNOD_* argument.

It also allows us to consolidate Linux and Hurd mknod implementation.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
Adhemerval Zanella 2020-10-26 08:58:01 -03:00
parent 4d97cc8cf3
commit 99468ed45f
9 changed files with 10 additions and 166 deletions

View File

@ -34,7 +34,7 @@ routines := \
mkfifo mkfifoat \
stat fstat lstat stat64 fstat64 lstat64 fstatat fstatat64 \
statx \
mknod mknodat xmknod xmknodat \
mknod mknodat \
statfs fstatfs statfs64 fstatfs64 \
statvfs fstatvfs statvfs64 fstatvfs64 \
umask chmod fchmod lchmod fchmodat \

View File

@ -15,13 +15,13 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int
__mknod (const char *path, mode_t mode, dev_t dev)
{
return __xmknod (_MKNOD_VER, path, mode, &dev);
return __mknodat (AT_FDCWD, path, mode, dev);
}
libc_hidden_def (__mknod)
weak_alias (__mknod, mknod)

View File

@ -21,7 +21,10 @@
int
__mknodat (int fd, const char *path, mode_t mode, dev_t dev)
{
return __xmknodat (_MKNOD_VER, fd, path, mode, &dev);
__set_errno (ENOSYS);
return -1;
}
libc_hidden_def (__mknodat)
weak_alias (__mknodat, mknodat)
stub_warning (mknodat)

View File

@ -1,40 +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/types.h>
#include <sys/stat.h>
/* Create a device file named PATH, with permission and special bits MODE
and device number DEV (which can be constructed from major and minor
device numbers with the `makedev' macro above). */
int
__xmknod (int vers, const char *path, mode_t mode, dev_t *dev)
{
if (vers != _MKNOD_VER)
{
__set_errno (EINVAL);
return -1;
}
__set_errno (ENOSYS);
return -1;
}
stub_warning (__xmknod)
weak_alias (__xmknod, _xmknod)
libc_hidden_def (__xmknod)

View File

@ -1,62 +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/types.h>
#include <sys/stat.h>
/* Create a device file named PATH relative to FD, with permission and
special bits MODE and device number DEV (which can be constructed
from major and minor device numbers with the `makedev' macro
above). */
int
__xmknodat (int vers, int fd, const char *path, mode_t mode, dev_t *dev)
{
if (vers != _MKNOD_VER)
{
__set_errno (EINVAL);
return -1;
}
if (path == NULL)
{
__set_errno (EINVAL);
return -1;
}
if (fd != AT_FDCWD && path[0] != '/')
{
/* Check FD is associated with a directory. */
struct stat64 st;
if (__fstat64 (fd, &st) != 0)
return -1;
if (!S_ISDIR (st.st_mode))
{
__set_errno (ENOTDIR);
return -1;
}
}
__set_errno (ENOSYS);
return -1;
}
stub_warning (__xmknodat)
libc_hidden_def (__xmknodat)

View File

@ -201,6 +201,7 @@ sysdep_routines += f_setlk close_nocancel close_nocancel_nostatus \
pread64_nocancel write_nocancel pwrite64_nocancel \
wait4_nocancel \
xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
xmknod xmknodat \
fxstatat fxstatat64
endif

View File

@ -1,31 +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>
#include <fcntl.h>
#include <shlib-compat.h>
/* Create a device file named FILE_NAME, with permission and special bits MODE
and device number DEV (which can be constructed from major and minor
device numbers with the `makedev' macro above). */
int
__mknod (const char *file_name, mode_t mode, dev_t dev)
{
return __mknodat (AT_FDCWD, file_name, mode, dev);
}
libc_hidden_def (__mknod)
weak_alias (__mknod, mknod)

View File

@ -63,7 +63,8 @@ sysdep_routines += adjtimex clone umount umount2 readahead sysctl \
process_vm_readv process_vm_writev clock_adjtime \
time64-support pselect32 \
xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
fxstatat fxstatat64
fxstatat fxstatat64 \
xmknod xmknodat
CFLAGS-gethostid.c = -fexceptions
CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables

View File

@ -1,28 +0,0 @@
/* Create a special or ordinary file. Linux version.
Copyright (C) 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>
#include <fcntl.h>
int
__mknod (const char *path, mode_t mode, dev_t dev)
{
return __mknodat (AT_FDCWD, path, mode, dev);
}
libc_hidden_def (__mknod)
weak_alias (__mknod, mknod)