1
/* Uncancelable versions of cancelable interfaces. Linux/NPTL version.
3
Copyright (C) 2003, 2006, 2009-2012 Free Software Foundation, Inc.
5
This file is part of the GNU C Library.
6
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
8
The GNU C Library is free software; you can redistribute it and/or
9
modify it under the terms of the GNU Lesser General Public
10
License as published by the Free Software Foundation; either
11
version 2.1 of the License, or (at your option) any later version.
13
The GNU C Library is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
Lesser General Public License for more details.
18
You should have received a copy of the GNU Lesser General Public
19
License along with the GNU C Library; if not, see
20
<http://www.gnu.org/licenses/>. */
24
#define open_not_cancel(name, flags, mode) \
25
INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), (flags), (mode))
27
#define open_not_cancel_2(name, flags) \
28
INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), (flags))
30
#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
31
extern int __openat_nocancel (int fd, const char *fname, int oflag,
32
mode_t mode) attribute_hidden;
33
extern int __openat64_nocancel (int fd, const char *fname, int oflag,
34
mode_t mode) attribute_hidden;
36
# define __openat_nocancel(fd, fname, oflag, mode) \
37
openat (fd, fname, oflag, mode)
38
# define __openat64_nocancel(fd, fname, oflag, mode) \
39
openat64 (fd, fname, oflag, mode)
42
/* Uncancelable openat. */
43
#define openat_not_cancel(fd, fname, oflag, mode) \
44
__openat_nocancel (fd, fname, oflag, mode)
45
#define openat_not_cancel_3(fd, fname, oflag) \
46
__openat_nocancel (fd, fname, oflag, 0)
47
#define openat64_not_cancel(fd, fname, oflag, mode) \
48
__openat64_nocancel (fd, fname, oflag, mode)
49
#define openat64_not_cancel_3(fd, fname, oflag) \
50
__openat64_nocancel (fd, fname, oflag, 0)
52
/* Uncancelable close. */
53
#define close_not_cancel(fd) \
54
INLINE_SYSCALL (close, 1, fd)
55
#define close_not_cancel_no_status(fd) \
56
(void) ({ INTERNAL_SYSCALL_DECL (err); \
57
INTERNAL_SYSCALL (close, err, 1, (fd)); })
59
/* Uncancelable read. */
60
#define read_not_cancel(fd, buf, n) \
61
INLINE_SYSCALL (read, 3, (fd), (buf), (n))
63
/* Uncancelable write. */
64
#define write_not_cancel(fd, buf, n) \
65
INLINE_SYSCALL (write, 3, (fd), (buf), (n))
67
/* Uncancelable writev. */
68
#define writev_not_cancel_no_status(fd, iov, n) \
69
(void) ({ INTERNAL_SYSCALL_DECL (err); \
70
INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); })
72
/* Uncancelable fcntl. */
73
#define fcntl_not_cancel(fd, cmd, val) \
74
__fcntl_nocancel (fd, cmd, val)
76
/* Uncancelable waitpid. */
78
# define waitpid_not_cancel(pid, stat_loc, options) \
79
INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options)
81
# define waitpid_not_cancel(pid, stat_loc, options) \
82
INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
85
/* Uncancelable pause. */
87
# define pause_not_cancel() \
88
INLINE_SYSCALL (pause, 0)
90
# define pause_not_cancel() \
94
/* Uncancelable nanosleep. */
96
# define nanosleep_not_cancel(requested_time, remaining) \
97
INLINE_SYSCALL (nanosleep, 2, requested_time, remaining)
99
# define nanosleep_not_cancel(requested_time, remaining) \
100
__nanosleep_nocancel (requested_time, remaining)
103
/* Uncancelable sigsuspend. */
104
#define sigsuspend_not_cancel(set) \
105
__sigsuspend_nocancel (set)