aboutsummaryrefslogtreecommitdiffstats
path: root/msdos/sigaction.c
diff options
context:
space:
mode:
authorDave Love <[email protected]>1999-10-03 15:56:58 +0000
committerDave Love <[email protected]>1999-10-03 15:56:58 +0000
commita4a9692da15ec1531a5075b671b62ebf1f2b9d92 (patch)
tree13d2395598273a1e6667211e29c6d286480d65b6 /msdos/sigaction.c
parentd7f3b2023f6105f04e90791ee19efd5a872ce33a (diff)
#
Diffstat (limited to 'msdos/sigaction.c')
-rw-r--r--msdos/sigaction.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/msdos/sigaction.c b/msdos/sigaction.c
new file mode 100644
index 0000000000..5b3ae79081
--- /dev/null
+++ b/msdos/sigaction.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+#include <signal.h>
+#include <errno.h>
+
+int
+sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact)
+{
+ int retval = 0;
+
+ if (_oact)
+ {
+ void (*installed_sig)(int) = signal (_sig, SIG_IGN);
+
+ /* FIXME */
+ if (installed_sig == SIG_ERR)
+ {
+ retval = -1;
+ errno = EINVAL;
+ }
+ else
+ signal (_sig, installed_sig);
+ _oact->sa_handler = installed_sig;
+ retval = sigemptyset (&_oact->sa_mask);
+ _oact->sa_flags = 0;
+ }
+ if (_act)
+ {
+ if (signal (_sig, _act->sa_handler) == SIG_ERR)
+ {
+ retval = -1;
+ errno = EINVAL;
+ }
+ }
+ return 0;
+}
+
+
+