--- nfs-utils-2.4.1/support/misc/xstat.c.orig 2019-06-10 17:34:37.000000000 +0300 +++ nfs-utils-2.4.1/support/misc/xstat.c 2019-07-26 11:51:26.783999140 +0300 @@ -8,91 +8,6 @@ #include "config.h" #include "xstat.h" -#ifdef HAVE_FSTATAT -#ifdef HAVE_STATX - -static void -statx_copy(struct stat *stbuf, const struct statx *stxbuf) -{ - stbuf->st_dev = makedev(stxbuf->stx_dev_major, stxbuf->stx_dev_minor); - stbuf->st_ino = stxbuf->stx_ino; - stbuf->st_mode = stxbuf->stx_mode; - stbuf->st_nlink = stxbuf->stx_nlink; - stbuf->st_uid = stxbuf->stx_uid; - stbuf->st_gid = stxbuf->stx_gid; - stbuf->st_rdev = makedev(stxbuf->stx_rdev_major, stxbuf->stx_rdev_minor); - stbuf->st_size = stxbuf->stx_size; - stbuf->st_blksize = stxbuf->stx_blksize; - stbuf->st_blocks = stxbuf->stx_blocks; - stbuf->st_atim.tv_sec = stxbuf->stx_atime.tv_sec; - stbuf->st_atim.tv_nsec = stxbuf->stx_atime.tv_nsec; - stbuf->st_mtim.tv_sec = stxbuf->stx_mtime.tv_sec; - stbuf->st_mtim.tv_nsec = stxbuf->stx_mtime.tv_nsec; - stbuf->st_ctim.tv_sec = stxbuf->stx_ctime.tv_sec; - stbuf->st_ctim.tv_nsec = stxbuf->stx_ctime.tv_nsec; -} - -static int -statx_do_stat(int fd, const char *pathname, struct stat *statbuf, int flags) -{ - static int statx_supported = 1; - struct statx stxbuf; - int ret; - - if (statx_supported) { - ret = statx(fd, pathname, flags, - STATX_BASIC_STATS, - &stxbuf); - if (ret == 0) { - statx_copy(statbuf, &stxbuf); - return 0; - } - if (errno == ENOSYS) - statx_supported = 0; - } else - errno = ENOSYS; - return -1; -} - -static int -statx_stat_nosync(int fd, const char *pathname, struct stat *statbuf, int flags) -{ - return statx_do_stat(fd, pathname, statbuf, flags | AT_STATX_DONT_SYNC); -} - -#else - -static int -statx_stat_nosync(int fd, const char *pathname, struct stat *statbuf, int flags) -{ - errno = ENOSYS; - return -1; -} - -#endif /* HAVE_STATX */ - -int xlstat(const char *pathname, struct stat *statbuf) -{ - if (statx_stat_nosync(AT_FDCWD, pathname, statbuf, AT_NO_AUTOMOUNT| - AT_SYMLINK_NOFOLLOW) == 0) - return 0; - else if (errno != ENOSYS) - return -1; - return fstatat(AT_FDCWD, pathname, statbuf, AT_NO_AUTOMOUNT | - AT_SYMLINK_NOFOLLOW); -} - -int xstat(const char *pathname, struct stat *statbuf) -{ - if (statx_stat_nosync(AT_FDCWD, pathname, statbuf, AT_NO_AUTOMOUNT) == 0) - return 0; - else if (errno != ENOSYS) - return -1; - return fstatat(AT_FDCWD, pathname, statbuf, AT_NO_AUTOMOUNT); -} - -#else - int xlstat(const char *pathname, struct stat *statbuf) { return lstat(pathname, statbuf); @@ -102,4 +17,3 @@ { return stat(pathname, statbuf); } -#endif