diff options
author | Peter S. Mazinger <ps.m@gmx.net> | 2011-04-23 20:59:28 +0200 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2012-06-15 14:00:42 +0200 |
commit | 804ab2f72f974c15826df439fa0876756989b97c (patch) | |
tree | c7453804e2656d1c47815fa987f595bcf665d3b1 /libc/sysdeps/linux | |
parent | 62c208d68fb07d85e42780394576b6b40aae7d53 (diff) |
not-cancel.h: update common version and make sure we use this one
Update file (same as in NPTL).
Disable unused parts, the remaining inlines will be fixed later.
Copy it to include to be sure that we use this one independently of
chosen threads.
Provide write,close and waitpid_not_cancel for LT new.
Use wait4 syscall instead of waitpid syscall (kernel says so).
Provide open_not_cancel and close_not_cancel for librt's spawn.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps/linux')
-rw-r--r-- | libc/sysdeps/linux/common/not-cancel.h | 61 |
1 files changed, 58 insertions, 3 deletions
diff --git a/libc/sysdeps/linux/common/not-cancel.h b/libc/sysdeps/linux/common/not-cancel.h index b3484de38..6a4dee4f8 100644 --- a/libc/sysdeps/linux/common/not-cancel.h +++ b/libc/sysdeps/linux/common/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,6 +18,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <sys/types.h> #include <sysdep.h> #ifdef NOT_IN_libc @@ -28,6 +29,30 @@ #define open_not_cancel_2(name, flags) \ INLINE_SYSCALL (open, 2, (const char *) (name), (flags)) +#if 0 +/* 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) +#endif + /* Uncancelable close. */ #define close_not_cancel(fd) \ INLINE_SYSCALL (close, 1, fd) @@ -39,10 +64,13 @@ #define read_not_cancel(fd, buf, n) \ INLINE_SYSCALL (read, 3, (fd), (buf), (n)) +#ifdef __LINUXTHREADS_NEW__ /* Uncancelable write. */ #define write_not_cancel(fd, buf, n) \ INLINE_SYSCALL (write, 3, (fd), (buf), (n)) +#endif +#if 0 /* Uncancelable writev. */ #define writev_not_cancel_no_status(fd, iov, n) \ (void) ({ INTERNAL_SYSCALL_DECL (err); \ @@ -51,17 +79,44 @@ /* Uncancelable fcntl. */ #define fcntl_not_cancel(fd, cmd, val) \ __fcntl_nocancel (fd, cmd, val) +#endif +#ifdef __LINUXTHREADS_NEW__ /* Uncancelable waitpid. */ -#ifdef __NR_waitpid +#if 0 /*def __NR_waitpid*/ # define waitpid_not_cancel(pid, stat_loc, options) \ INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options) #else # define waitpid_not_cancel(pid, stat_loc, options) \ INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL) #endif +#endif -#else +/* 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 + +#if 0 +/* Uncancelable sigsuspend. */ +#define sigsuspend_not_cancel(set) \ + __sigsuspend_nocancel (set) +#endif + +#elif !defined NOT_IN_libc #include <cancel.h> #include <fcntl.h> |