diff options
67 files changed, 427 insertions, 493 deletions
diff --git a/include/sys/stat.h b/include/sys/stat.h index f8847cf73e..061204b1fc 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -2,10 +2,26 @@ #include <io/sys/stat.h> #ifndef _ISOMAC +# include <xstatver.h> + /* Now define the internal interfaces. */ extern int __stat (const char *__file, struct stat *__buf); +extern int __stat64 (const char *__file, struct stat64 *__buf); extern int __fstat (int __fd, struct stat *__buf); +extern int __fstat64 (int __fd, struct stat64 *__buf); extern int __lstat (const char *__file, struct stat *__buf); +extern int __lstat64 (const char *__file, struct stat64 *__buf); +extern int __fstatat (int dirfd, const char *pathname, struct stat *buf, + int flags); +extern int __fstatat64 (int dirfd, const char *pathname, struct stat64 *buf, + int flags); +# if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN) +hidden_proto (__stat64) +hidden_proto (__fstat64) +hidden_proto (__lstat64) +hidden_proto (__fstatat64) +# endif + extern int __chmod (const char *__file, __mode_t __mode); libc_hidden_proto (__chmod) extern int __fchmod (int __fd, __mode_t __mode); @@ -15,18 +31,6 @@ extern int __mkdir (const char *__path, __mode_t __mode); libc_hidden_proto (__mkdir) extern int __mknod (const char *__path, __mode_t __mode, __dev_t __dev); -#if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN) -hidden_proto (__fxstat) -hidden_proto (__fxstat64) -hidden_proto (__lxstat) -hidden_proto (__lxstat64) -hidden_proto (__xstat) -hidden_proto (__xstat64) -#endif -extern __inline__ int __stat (const char *__path, struct stat *__statbuf) -{ - return __xstat (_STAT_VER, __path, __statbuf); -} libc_hidden_proto (__xmknod) extern __inline__ int __mknod (const char *__path, __mode_t __mode, __dev_t __dev) @@ -35,32 +39,46 @@ extern __inline__ int __mknod (const char *__path, __mode_t __mode, } libc_hidden_proto (__xmknodat) -libc_hidden_proto (__fxstatat) -libc_hidden_proto (__fxstatat64) - -# if IS_IN (rtld) && !defined NO_RTLD_HIDDEN -extern __typeof (__fxstatat64) __fxstatat64 attribute_hidden; +int __fxstat (int __ver, int __fildes, struct stat *__stat_buf); +int __xstat (int __ver, const char *__filename, + struct stat *__stat_buf); +int __lxstat (int __ver, const char *__filename, struct stat *__stat_buf); +int __fxstatat (int __ver, int __fildes, const char *__filename, + struct stat *__stat_buf, int __flag); +int __fxstat64 (int ver, int __fildes, struct stat64 *__stat_buf); +int __xstat64 (int ver, const char *__filename, struct stat64 *__stat_buf); +int __lxstat64 (int ver, const char *__filename, struct stat64 *__stat_buf); +int __fxstatat64 (int ver, int __fildes, const char *__filename, + struct stat64 *__stat_buf, int __flag); +libc_hidden_proto (__fxstat); +libc_hidden_proto (__xstat); +libc_hidden_proto (__lxstat); +libc_hidden_proto (__fxstatat); +# if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN) +hidden_proto (__fxstat64); +hidden_proto (__xstat64); +hidden_proto (__lxstat64); +hidden_proto (__fxstatat64); # endif -/* The `stat', `fstat', `lstat' functions have to be handled special since - even while not compiling the library with optimization calls to these - functions in the shared library must reference the `xstat' etc functions. - We have to use macros but we cannot define them in the normal headers - since on user level we must use real functions. */ -#define stat(fname, buf) __xstat (_STAT_VER, fname, buf) -#define lstat(fname, buf) __lxstat (_STAT_VER, fname, buf) -#define __lstat(fname, buf) __lxstat (_STAT_VER, fname, buf) -#define lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf) -#define __lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf) -#define stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf) -#define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf) -#define fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf) -#define __fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf) -#define fstat(fd, buf) __fxstat (_STAT_VER, fd, buf) -#define __fstat(fd, buf) __fxstat (_STAT_VER, fd, buf) -#define __fstatat(dfd, fname, buf, flag) \ - __fxstatat (_STAT_VER, dfd, fname, buf, flag) -#define __fstatat64(dfd, fname, buf, flag) \ - __fxstatat64 (_STAT_VER, dfd, fname, buf, flag) +# ifdef NO_RTLD_HIDDEN +/* These are still required for Hurd. */ +# define stat(fname, buf) __xstat (_STAT_VER, fname, buf) +# define lstat(fname, buf) __lxstat (_STAT_VER, fname, buf) +# define __lstat(fname, buf) __lxstat (_STAT_VER, fname, buf) +# define lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf) +# define __lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf) +# define stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf) +# define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf) +# define fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf) +# define __fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf) +# define fstat(fd, buf) __fxstat (_STAT_VER, fd, buf) +# define __fstat(fd, buf) __fxstat (_STAT_VER, fd, buf) +# define __fstatat(dfd, fname, buf, flag) \ + __fxstatat (_STAT_VER, dfd, fname, buf, flag) +# define __fstatat64(dfd, fname, buf, flag) \ + __fxstatat64 (_STAT_VER, dfd, fname, buf, flag) +# endif /* NO_RTLD_HIDDEN */ + #endif #endif diff --git a/io/Makefile b/io/Makefile index 36ac06070a..69b2468d64 100644 --- a/io/Makefile +++ b/io/Makefile @@ -60,8 +60,7 @@ routines := \ # 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 = stat fstat lstat stat64 fstat64 lstat64 \ - fstatat fstatat64 mknod mknodat +static-only-routines = mknod mknodat others := pwd test-srcs := ftwtest @@ -78,6 +77,7 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ # Likewise for statx, but we do not need static linking here. tests-internal += tst-statx +tests-static += tst-statx ifeq ($(run-built-tests),yes) tests-special += $(objpfx)ftwtest.out diff --git a/io/Versions b/io/Versions index ee468055ff..f6db0e84ad 100644 --- a/io/Versions +++ b/io/Versions @@ -132,6 +132,9 @@ libc { fcntl64; statx; } + GLIBC_2.33 { + stat; stat64; fstat; fstat64; lstat; lstat64; fstatat; fstatat64; + } GLIBC_PRIVATE { __libc_fcntl64; __fcntl_nocancel; @@ -141,5 +144,6 @@ libc { __file_change_detection_for_stat; __file_change_detection_for_path; __file_change_detection_for_fp; + __fstat64; } } diff --git a/io/fstat.c b/io/fstat.c index 6ce077dc4a..c392ebe35b 100644 --- a/io/fstat.c +++ b/io/fstat.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 - Gener |
