From baf532c12785a7c85493d6b6b2345f509b1d6389 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 16 Nov 2005 00:36:16 +0000 Subject: [PATCH] * sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c (__fxstatat): Return -1 on failure. * sysdeps/unix/sysv/linux/fchownat.c (fchownat): Likewise. * sysdeps/unix/sysv/linux/i386/fxstatat.c (__fxstatat): Likewise.. * sysdeps/unix/sysv/linux/fxstatat64.c [__ASSUME_STAT64_SYSCALL] (__fxstatat64): Handle errors. --- ChangeLog | 7 +++++++ sysdeps/unix/sysv/linux/fchownat.c | 5 ++++- sysdeps/unix/sysv/linux/fxstatat64.c | 2 +- sysdeps/unix/sysv/linux/i386/fxstatat.c | 7 +++++-- sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c | 5 ++++- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 901f92660c..ea2a482451 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2005-11-15 Ulrich Drepper + * sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c (__fxstatat): + Return -1 on failure. + * sysdeps/unix/sysv/linux/fchownat.c (fchownat): Likewise. + * sysdeps/unix/sysv/linux/i386/fxstatat.c (__fxstatat): Likewise.. + * sysdeps/unix/sysv/linux/fxstatat64.c [__ASSUME_STAT64_SYSCALL] + (__fxstatat64): Handle errors. + * io/sys/poll.h: Add comment explaining poll is a cancellation point. * sysdeps/unix/sysv/linux/syscalls.list (epoll_wait): Align with diff --git a/sysdeps/unix/sysv/linux/fchownat.c b/sysdeps/unix/sysv/linux/fchownat.c index d3cb992a09..d776c65a1f 100644 --- a/sysdeps/unix/sysv/linux/fchownat.c +++ b/sysdeps/unix/sysv/linux/fchownat.c @@ -67,7 +67,10 @@ fchownat (fd, file, owner, group, flag) result = INTERNAL_SYSCALL (chown, err, 3, file, owner, group); if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0)) - __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); + { + __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); + result = -1; + } return result; } diff --git a/sysdeps/unix/sysv/linux/fxstatat64.c b/sysdeps/unix/sysv/linux/fxstatat64.c index 8c41db710c..2360f50d98 100644 --- a/sysdeps/unix/sysv/linux/fxstatat64.c +++ b/sysdeps/unix/sysv/linux/fxstatat64.c @@ -128,8 +128,8 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag) return __xstat64_conv (vers, &kst, st); fail: +#endif __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); return -1; -#endif } diff --git a/sysdeps/unix/sysv/linux/i386/fxstatat.c b/sysdeps/unix/sysv/linux/i386/fxstatat.c index 2fc89e69c4..23fd29c9a3 100644 --- a/sysdeps/unix/sysv/linux/i386/fxstatat.c +++ b/sysdeps/unix/sysv/linux/i386/fxstatat.c @@ -47,7 +47,7 @@ extern int __have_no_stat64; int __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) { - if (flag & ~AT_SYMLINK_NOFOLLOW) + if (__builtin_expect (flag & ~AT_SYMLINK_NOFOLLOW, 0)) { __set_errno (EINVAL); return -1; @@ -138,7 +138,10 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) out: if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0)) - __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); + { + __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); + result = -1; + } return result; } diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c b/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c index 70e73571f7..d88b10e947 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c @@ -70,7 +70,10 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) res = INTERNAL_SYSCALL (stat, err, 2, file, CHECK_1 (st)); if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (res, err), 0)) - __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (res, err), fd, buf); + { + __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (res, err), fd, buf); + res = -1; + } return res; }