1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Remove __ASSUME_STAT64_SYSCALL.

This commit is contained in:
Joseph Myers
2012-08-27 19:36:04 +00:00
parent 5dbf56af7e
commit ad845c0be9
22 changed files with 81 additions and 402 deletions

View File

@ -1,5 +1,5 @@
/* xstat64 using old-style Unix stat system call.
Copyright (C) 1991,1995-2002,2003,2006 Free Software Foundation, Inc.
/* xstat64 using Linux stat64 system call.
Copyright (C) 1991-2012 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
@ -27,59 +27,18 @@
#include <kernel-features.h>
#if __ASSUME_STAT64_SYSCALL == 0
# include <xstatconv.h>
#endif
#ifdef __NR_stat64
# if __ASSUME_STAT64_SYSCALL == 0
/* The variable is shared between all wrappers around *stat64 calls.
This is the definition. */
int __have_no_stat64;
# endif
#endif
/* Get information about the file NAME in BUF. */
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 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
return result;
}