diff options
58 files changed, 132 insertions, 172 deletions
diff --git a/include/sys/stat.h b/include/sys/stat.h index 061204b1fc..1f832f6ce8 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -29,14 +29,18 @@ libc_hidden_proto (fchmodat) extern __mode_t __umask (__mode_t __mask); extern int __mkdir (const char *__path, __mode_t __mode); libc_hidden_proto (__mkdir) + +extern int __mknodat (int fd, const char *path, mode_t mode, dev_t dev); +libc_hidden_proto (__mknodat); extern int __mknod (const char *__path, __mode_t __mode, __dev_t __dev); +libc_hidden_proto (__mknod); + +extern int __xmknod (int __ver, const char *__path, __mode_t __mode, + __dev_t *__dev); libc_hidden_proto (__xmknod) -extern __inline__ int __mknod (const char *__path, __mode_t __mode, - __dev_t __dev) -{ - return __xmknod (_MKNOD_VER, __path, __mode, &__dev); -} +extern int __xmknodat (int __ver, int __fd, const char *__path, + __mode_t __mode, __dev_t *__dev); libc_hidden_proto (__xmknodat) int __fxstat (int __ver, int __fildes, struct stat *__stat_buf); diff --git a/io/Makefile b/io/Makefile index 69b2468d64..6dd2c33fcf 100644 --- a/io/Makefile +++ b/io/Makefile @@ -57,11 +57,6 @@ routines := \ sendfile sendfile64 copy_file_range \ utimensat futimens file_change_detection -# These routines will be omitted from the libc shared object. -# Instead the static object files will be included in a special archive -# linked against when the shared library will be used. -static-only-routines = mknod mknodat - others := pwd test-srcs := ftwtest tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ diff --git a/io/Versions b/io/Versions index f6db0e84ad..49c4d2d40a 100644 --- a/io/Versions +++ b/io/Versions @@ -134,6 +134,7 @@ libc { } GLIBC_2.33 { stat; stat64; fstat; fstat64; lstat; lstat64; fstatat; fstatat64; + mknod; mknodat; } GLIBC_PRIVATE { __libc_fcntl64; diff --git a/io/mknod.c b/io/mknod.c index ac96829230..9eb4a2af7f 100644 --- a/io/mknod.c +++ b/io/mknod.c @@ -6,23 +6,6 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - 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 @@ -32,24 +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> -/* This definition is only used if inlining fails for this function; see - the last page of <sys/stat.h>. The real work is done by the `x' - function which is passed a version number argument. We arrange in the - makefile that when not inlined this function is always statically - linked; that way a dynamically-linked executable always encodes the - version number corresponding to the data structures it uses, so the `x' - functions in the shared library can adapt without needing to recompile - all callers. */ - int -attribute_hidden __mknod (const char *path, mode_t mode, dev_t dev) { return __xmknod (_MKNOD_VER, path, mode, &dev); } - -weak_hidden_alias (__mknod, mknod) +libc_hidden_def (__mknod) +weak_alias (__mknod, mknod) diff --git a/io/mknodat.c b/io/mknodat.c index 65c9f1aa9c..63a8068ad6 100644 --- a/io/mknodat.c +++ b/io/mknodat.c @@ -6,23 +6,6 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - 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 @@ -32,22 +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> -/* This definition is only used if inlining fails for this function; see - the last page of <sys/stat.h>. The real work is done by the `x' - function which is passed a version number argument. We arrange in the - makefile that when not inlined this function is always statically - linked; that way a dynamically-linked executable always encodes the - version number corresponding to the data structures it uses, so the `x' - functions in the shared library can adapt without needing to recompile - all callers. */ - int -attribute_hidden -mknodat (int fd, const char *path, mode_t mode, dev_t dev) +__mknodat (int fd, const char *path, mode_t mode, dev_t dev) { return __xmknodat (_MKNOD_VER, fd, path, mode, &dev); } +libc_hidden_def (__mknodat) +weak_alias (__mknodat, mknodat) diff --git a/io/sys/stat.h b/io/sys/stat.h index eb9cf5d5af..58c3770622 100644 --- a/io/sys/stat.h +++ b/io/sys/stat.h @@ -367,43 +367,11 @@ extern int utimensat (int __fd, const char *__path, /* Set file access and modification times of the file associated with FD. */ extern int futimens (int __fd, const struct timespec __times[2]) __THROW; #endif - -#ifndef _MKNOD_VER -# define _MKNOD_VER 0 -#endif - -extern int __xmknod (int __ver, const char *__path, __mode_t __mode, - __dev_t *__dev) __THROW __nonnull ((2, 4)); - -extern int __xmknodat (int __ver, int __fd, const char *__path, - __mode_t __mode, __dev_t *__dev) - __THROW __nonnull ((3, 5)); #ifdef __USE_GNU # include <bits/statx.h> #endif -#ifdef __USE_EXTERN_INLINES -# ifdef __USE_MISC -__extern_inline int -__NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev)) -{ - return __xmknod (_MKNOD_VER, __path, __mode, &__dev); -} -# endif - -# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED -# ifdef __USE_ATFILE -__extern_inline int -__NTH (mknodat (int __fd, const char *__path, __mode_t __mode, - __dev_t __dev)) -{ - return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev); -} -# endif -# endif -#endif - __END_DECLS diff --git a/sysdeps/generic/xstatver.h b/sysdeps/generic/xstatver.h index d727c98a16..281013b2f1 100644 --- a/sysdeps/generic/xstatver.h +++ b/sysdeps/generic/xstatver.h @@ -1,3 +1,4 @@ /* Versions of the 'struct stat' data structure used in compatibility xstat functions. */ #define _STAT_VER 0 +#define _MKNOD_VER 0 diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index f37ce0e8ae..e2ff0e8b9e 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -2198,6 +2198,8 @@ GLIBC_2.33 fstatat64 F GLIBC_2.33 lstat F GLIBC_2.33 lstat64 F GLIBC_2.33 mallinfo2 F +GLIBC_2.33 mknod F +GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F GLIBC_2.4 __confstr_chk F diff --git a/sysdeps/posix/mkfifo.c b/sysdeps/posix/mkfifo.c index 61f62e2e96..0b89f6c291 100644 --- a/sysdeps/posix/mkfifo.c +++ b/sysdeps/posix/mkfifo.c @@ -24,6 +24,5 @@ int mkfifo (const char *path, mode_t mode) { - dev_t dev = 0; - return __xmknod (_MKNOD_VER, path, mode | S_IFIFO, &dev); + return __mknod (path, mode | S_IFIFO, 0); } diff --git a/sysdeps/posix/mkfifoat.c b/sysdeps/posix/mkfifoat.c index 5287fe8782..d1e0977ba1 100644 --- a/sysdeps/posix/mkfifoat.c +++ b/ |
