diff options
Diffstat (limited to 'libpthread/linuxthreads')
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/pthread/not-cancel.h | 51 | 
1 files changed, 47 insertions, 4 deletions
| diff --git a/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h b/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h index 4373917df..80d33be29 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h +++ b/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h @@ -1,5 +1,5 @@  /* Uncancelable versions of cancelable interfaces.  Linux version. -   Copyright (C) 2003 Free Software Foundation, Inc. +   Copyright (C) 2003, 2006 Free Software Foundation, Inc.     This file is part of the GNU C Library.     Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. @@ -18,9 +18,8 @@     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA     02111-1307 USA.  */ -#include <sys/syscall.h> -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(func, numargs, args...) syscall(__NR_ ## func, args) +#include <sys/types.h> +#include <sysdep.h>  /* Uncancelable open.  */  #define open_not_cancel(name, flags, mode) \ @@ -28,6 +27,28 @@  #define open_not_cancel_2(name, flags) \     INLINE_SYSCALL (open, 2, (const char *) (name), (flags)) +/* Uncancelable openat.  */ +#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt +extern int __openat_nocancel (int fd, const char *fname, int oflag, +			      mode_t mode) attribute_hidden; +extern int __openat64_nocancel (int fd, const char *fname, int oflag, +				mode_t mode) attribute_hidden; +#else +# define __openat_nocancel(fd, fname, oflag, mode) \ +  openat (fd, fname, oflag, mode) +# define __openat64_nocancel(fd, fname, oflag, mode) \ +  openat64 (fd, fname, oflag, mode) +#endif + +#define openat_not_cancel(fd, fname, oflag, mode) \ +  __openat_nocancel (fd, fname, oflag, mode) +#define openat_not_cancel_3(fd, fname, oflag) \ +  __openat_nocancel (fd, fname, oflag, 0) +#define openat64_not_cancel(fd, fname, oflag, mode) \ +  __openat64_nocancel (fd, fname, oflag, mode) +#define openat64_not_cancel_3(fd, fname, oflag) \ +  __openat64_nocancel (fd, fname, oflag, 0) +  /* Uncancelable close.  */  #define close_not_cancel(fd) \    INLINE_SYSCALL (close, 1, fd) @@ -60,3 +81,25 @@  # define waitpid_not_cancel(pid, stat_loc, options) \    INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)  #endif + +/* Uncancelable pause.  */ +#ifdef __NR_pause +# define pause_not_cancel() \ +  INLINE_SYSCALL (pause, 0) +#else +# define pause_not_cancel() \ +  __pause_nocancel () +#endif + +/* Uncancelable nanosleep.  */ +#ifdef __NR_nanosleep +# define nanosleep_not_cancel(requested_time, remaining) \ +  INLINE_SYSCALL (nanosleep, 2, requested_time, remaining) +#else +# define nanosleep_not_cancel(requested_time, remaining) \ +  __nanosleep_nocancel (requested_time, remaining) +#endif + +/* Uncancelable sigsuspend.  */ +#define sigsuspend_not_cancel(set) \ +  __sigsuspend_nocancel (set) | 
