int stat64(const char *file_name, struct stat64 *buf) { int result; struct kernel_stat64 kbuf; result = __syscall_stat64(file_name, &kbuf); if (result == 0) { __xstat64_conv(&kbuf, buf); } return result; }
int fstat64(int fd, struct stat64 *buf) { int result; struct kernel_stat64 kbuf; result = __syscall_fstat64(fd, &kbuf); if (result == 0) { __xstat64_conv(&kbuf, buf); } return result; }
int __xstat64 (int vers, const char *name, struct stat64 *buf) { int result; struct kernel_stat kbuf; result = INLINE_SYSCALL (stat, 2, CHECK_STRING (name), __ptrvalue (&kbuf)); if (result == 0) result = __xstat64_conv (vers, &kbuf, buf); return result; }
int __xstat64 (int vers, const char *name, struct stat64 *buf) { int result; struct kernel_stat kbuf; result = INLINE_SYSCALL (stat, 2, name, &kbuf); if (result == 0) result = __xstat64_conv (vers, &kbuf, buf); return result; }
int __fxstat64 (int vers, int fd, struct stat64 *buf) { int result; struct kernel_stat kbuf; result = INLINE_SYSCALL (fstat, 2, fd, __ptrvalue (&kbuf)); if (result == 0) result = __xstat64_conv (vers, &kbuf, buf); return result; }
int fstatat64(int fd, const char *file, struct stat64 *buf, int flag) { # ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__ int ret; struct kernel_stat64 kbuf; ret = INLINE_SYSCALL(fstatat64, 4, fd, file, &kbuf, flag); if (ret == 0) __xstat64_conv(&kbuf, buf); return ret; # else return INLINE_SYSCALL(fstatat64, 4, fd, file, buf, flag); # endif }
int fstat64(int fd, struct stat64 *buf) { #ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__ int result; struct kernel_stat64 kbuf; result = __syscall_fstat64(fd, &kbuf); if (result == 0) { __xstat64_conv(&kbuf, buf); } return result; #else return __syscall_fstat64(fd, buf); #endif }
int ___xstat64 (int vers, const char *name, struct stat64 *buf) { int result; #if __ASSUME_STAT64_SYSCALL > 0 result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf)); # if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) buf->st_ino = buf->__st_ino; # endif return result; #else struct kernel_stat kbuf; # if defined __NR_stat64 if (! __have_no_stat64) { int saved_errno = errno; result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf)); if (result != -1 || errno != ENOSYS) { # if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (!result && buf->__st_ino != (__ino_t) buf->st_ino) buf->st_ino = buf->__st_ino; # endif return result; } __set_errno (saved_errno); __have_no_stat64 = 1; } # endif result = INLINE_SYSCALL (stat, 2, CHECK_STRING (name), __ptrvalue (&kbuf)); if (result == 0) result = __xstat64_conv (vers, &kbuf, buf); return result; #endif }
int __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag) { if (__builtin_expect (vers != _STAT_VER_LINUX, 0)) { __set_errno (EINVAL); return -1; } int result; INTERNAL_SYSCALL_DECL (err); #ifdef __NR_fstatat64 # ifndef __ASSUME_ATFCTS if (__have_atfcts >= 0) # endif { result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, st, flag); # ifndef __ASSUME_ATFCTS if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 1) && INTERNAL_SYSCALL_ERRNO (result, err) == ENOSYS) __have_atfcts = -1; else # endif if (!__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 1)) return 0; else { __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); return -1; } } #endif #ifndef __ASSUME_ATFCTS if (flag & ~AT_SYMLINK_NOFOLLOW) { __set_errno (EINVAL); return -1; } char *buf = NULL; if (fd != AT_FDCWD && file[0] != '/') { size_t filelen = strlen (file); static const char procfd[] = "/proc/self/fd/%d/%s"; /* Buffer for the path name we are going to use. It consists of - the string /proc/self/fd/ - the file descriptor number - the file name provided. The final NUL is included in the sizeof. A bit of overhead due to the format elements compensates for possible negative numbers. */ size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen; buf = alloca (buflen); __snprintf (buf, buflen, procfd, fd, file); file = buf; } # if __ASSUME_STAT64_SYSCALL > 0 if (flag & AT_SYMLINK_NOFOLLOW) result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), CHECK_1 (st)); else result = INTERNAL_SYSCALL (stat64, err, 2, CHECK_STRING (file), CHECK_1 (st)); if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) { # if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (st->__st_ino != (__ino_t) st->st_ino) st->st_ino = st->__st_ino; # endif return result; } # else struct kernel_stat kst; # ifdef __NR_stat64 if (! __have_no_stat64) { if (flag & AT_SYMLINK_NOFOLLOW) result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), CHECK_1 (st)); else result = INTERNAL_SYSCALL (stat64, err, 2, CHECK_STRING (file), CHECK_1 (st)); if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) { # if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (st->__st_ino != (__ino_t) st->st_ino) st->st_ino = st->__st_ino; # endif return result; } if (INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS) goto fail; __have_no_stat64 = 1; } # endif if (flag & AT_SYMLINK_NOFOLLOW) result = INTERNAL_SYSCALL (lstat, err, 2, CHECK_STRING (file), __ptrvalue (&kst)); else result = INTERNAL_SYSCALL (stat, err, 2, CHECK_STRING (file), __ptrvalue (&kst)); if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) return __xstat64_conv (vers, &kst, st); fail: # endif __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); return -1; #endif }