summaryrefslogtreecommitdiff
path: root/msdos/sigaction.c
diff options
context:
space:
mode:
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 00000000000..5b3ae790813
--- /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;
+}
+
+
+