]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/bsd/sigprocmask.c
update from main archive
[thirdparty/glibc.git] / sysdeps / unix / bsd / sigprocmask.c
CommitLineData
c4029823 1/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
28f540f4
RM
2This file is part of the GNU C Library.
3
4The GNU C Library is free software; you can redistribute it and/or
5modify it under the terms of the GNU Library General Public License as
6published by the Free Software Foundation; either version 2 of the
7License, or (at your option) any later version.
8
9The GNU C Library is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12Library General Public License for more details.
13
14You should have received a copy of the GNU Library General Public
15License along with the GNU C Library; see the file COPYING.LIB. If
16not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17Cambridge, MA 02139, USA. */
18
28f540f4
RM
19#include <errno.h>
20#include <stddef.h>
21#include <signal.h>
22
23
24/* If SET is not NULL, modify the current set of blocked signals
25 according to HOW, which may be SIG_BLOCK, SIG_UNBLOCK or SIG_SETMASK.
26 If OSET is not NULL, store the old set of blocked signals in *OSET. */
27int
c4029823
UD
28__sigprocmask (how, set, oset)
29 int how;
30 const sigset_t *set;
31 sigset_t *oset;
28f540f4
RM
32{
33 int mask;
34
35 if (set != NULL)
36 {
37 mask = *set;
38 switch (how)
39 {
40 case SIG_BLOCK:
c4029823 41 mask = __sigblock (mask);
28f540f4
RM
42 break;
43
44 case SIG_UNBLOCK:
45 mask = __sigblock (0) & ~mask;
46 /* Fall through. */
47
48 case SIG_SETMASK:
c4029823 49 mask = __sigsetmask (mask);
28f540f4
RM
50 break;
51
52 default:
c4029823 53 __set_errno (EINVAL);
28f540f4
RM
54 return -1;
55 }
56 }
57 else
c4029823 58 mask = __sigblock (0);
28f540f4
RM
59
60 if (oset != NULL)
61 *oset = mask;
62
63 return 0;
64}
65
66weak_alias (__sigprocmask, sigprocmask)