diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2012-10-12 11:42:22 +0100 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2013-02-20 13:45:13 +0100 |
commit | faa3bc7b7c661857925250d795c35d5c75dd4ca5 (patch) | |
tree | c5d13f8f063ca2c0a124bcfae01b7857cffd78ca | |
parent | 585ee9c4e7025363c048c8487ea60b99fb28977f (diff) |
not-cancel.h: Use openat if arch does not have the open syscall
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
4 files changed, 34 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/common/not-cancel.h b/libc/sysdeps/linux/common/not-cancel.h index 555ca4f4a..08dab8c9d 100644 --- a/libc/sysdeps/linux/common/not-cancel.h +++ b/libc/sysdeps/linux/common/not-cancel.h @@ -23,10 +23,17 @@ #ifdef NOT_IN_libc /* Uncancelable open. */ +#if defined __NR_openat && !defined __NR_open +#define open_not_cancel(name, flags, mode) \ + INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), (flags), (mode)) +#define open_not_cancel_2(name, flags) \ + INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), (flags)) +#else #define open_not_cancel(name, flags, mode) \ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode)) #define open_not_cancel_2(name, flags) \ INLINE_SYSCALL (open, 2, (const char *) (name), (flags)) +#endif #if 0 /* Uncancelable openat. */ diff --git a/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h b/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h index 01c69164d..bbdb0739c 100644 --- a/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h +++ b/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h @@ -21,10 +21,19 @@ #include <sysdep.h> /* Uncancelable open. */ +#if defined __NR_openat && !defined __NR_open +#define open_not_cancel(name, flags, mode) \ + INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), \ + (flags), (mode)) +#define open_not_cancel_2(name, flags) \ + INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), \ + (flags)) +#else #define open_not_cancel(name, flags, mode) \ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode)) #define open_not_cancel_2(name, flags) \ INLINE_SYSCALL (open, 2, (const char *) (name), (flags)) +#endif /* Uncancelable openat. */ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt diff --git a/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h b/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h index 01c69164d..b46d2ab49 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h +++ b/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h @@ -21,10 +21,19 @@ #include <sysdep.h> /* Uncancelable open. */ +#if defined __NR_openat && !defined __NR_open +#define open_not_cancel(name, flags, mode) \ + INLINE_SYSCALL (openat, 4, (int) (AT_FDCWD), (const char *) (name), \ + (flags), (mode)) +#define open_not_cancel_2(name, flags) \ + INLINE_SYSCALL (openat, 3, (int) (AT_FDCWD), (const char *) (name), \ + (flags)) +#else #define open_not_cancel(name, flags, mode) \ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode)) #define open_not_cancel_2(name, flags) \ INLINE_SYSCALL (open, 2, (const char *) (name), (flags)) +#endif /* Uncancelable openat. */ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h index 01c69164d..bbdb0739c 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h @@ -21,10 +21,19 @@ #include <sysdep.h> /* Uncancelable open. */ +#if defined __NR_openat && !defined __NR_open +#define open_not_cancel(name, flags, mode) \ + INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), \ + (flags), (mode)) +#define open_not_cancel_2(name, flags) \ + INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), \ + (flags)) +#else #define open_not_cancel(name, flags, mode) \ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode)) #define open_not_cancel_2(name, flags) \ INLINE_SYSCALL (open, 2, (const char *) (name), (flags)) +#endif /* Uncancelable openat. */ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt |