]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/posix/sigpause.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / posix / sigpause.c
CommitLineData
04277e02 1/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
84384f5b 2 This file is part of the GNU C Library.
28f540f4 3
84384f5b 4 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
28f540f4 8
84384f5b
UD
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 12 Lesser General Public License for more details.
28f540f4 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
28f540f4 17
66b3d198 18#define sigpause __rename_sigpause
28f540f4
RM
19#include <errno.h>
20#include <signal.h>
19361cb7 21#include <stddef.h> /* For NULL. */
66b3d198 22#undef sigpause
28f540f4 23
b5d482d0 24#include <sigset-cvt-mask.h>
ad4f43a2 25#include <sysdep-cancel.h>
b5d482d0 26
ad4f43a2
AZ
27int
28__sigpause (int sig_or_mask, int is_sig)
28f540f4
RM
29{
30 sigset_t set;
28f540f4 31
6d52618b
UD
32 if (is_sig != 0)
33 {
34 /* The modern X/Open implementation is requested. */
50304ef0 35 if (__sigprocmask (0, NULL, &set) < 0
7ffac51f 36 || sigdelset (&set, sig_or_mask) < 0)
6d52618b
UD
37 return -1;
38 }
b5d482d0
RM
39 else if (sigset_set_old_mask (&set, sig_or_mask) < 0)
40 return -1;
6d52618b 41
7a114794
UD
42 /* Note the sigpause() is a cancellation point. But since we call
43 sigsuspend() which itself is a cancellation point we do not have
44 to do anything here. */
50304ef0 45 return __sigsuspend (&set);
28f540f4 46}
5841dad9 47libc_hidden_def (__sigpause)
6bc31da0
UD
48
49/* We have to provide a default version of this function since the
50 standards demand it. The version which is a bit more reasonable is
51 the BSD version. So make this the default. */
6bc31da0 52int
34a075be 53__attribute__ ((weak))
8ce9ea0c 54__default_sigpause (int mask)
6bc31da0
UD
55{
56 return __sigpause (mask, 0);
57}
df4ef2ab 58#undef sigpause
6bc31da0 59weak_alias (__default_sigpause, sigpause)
e5e45b53 60strong_alias (__default_sigpause, __libc_sigpause)
8ce9ea0c
UD
61
62
63/* We have to provide a default version of this function since the
64 standards demand it. The version which is a bit more reasonable is
65 the BSD version. So make this the default. */
66int
34a075be 67__attribute__ ((weak))
8ce9ea0c
UD
68__xpg_sigpause (int sig)
69{
70 return __sigpause (sig, 1);
71}
e5e45b53 72strong_alias (__xpg_sigpause, __libc___xpg_sigpause)
ad4f43a2
AZ
73
74/* __sigsuspend handles cancellation. */
75LIBC_CANCEL_HANDLED ();