summaryrefslogtreecommitdiff
path: root/elksemu/elks_signal.c
diff options
context:
space:
mode:
authorRobert de Bath <rdebath@poboxes.com>1996-05-31 21:33:17 +0200
committerLubomir Rintel <lkundrak@v3.sk>2013-10-23 23:30:46 +0200
commite85ee07172eccafd9441362e774f7b184810d008 (patch)
tree5dc12259ab7a61b12d9df284fe58ad5cb312c526 /elksemu/elks_signal.c
parentdcc973ea3e31710429858c99d4f040334ac67c06 (diff)
downloaddev86-e85ee07172eccafd9441362e774f7b184810d008.tar.gz
Import Dev86-0.0.6.tar.gzv0.0.6
Diffstat (limited to 'elksemu/elks_signal.c')
-rw-r--r--elksemu/elks_signal.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/elksemu/elks_signal.c b/elksemu/elks_signal.c
index 2bf1e55..4b8e0c5 100644
--- a/elksemu/elks_signal.c
+++ b/elksemu/elks_signal.c
@@ -22,15 +22,17 @@ void sig_trap(int signo)
int elks_signal(int bx,int cx,int dx,int di,int si)
{
- int rv;
+ void (*oldsig)(int) = 0;
if( bx < 0 || bx >= NSIG ) { errno = EINVAL; return -1; }
- if( cx == 0 ) rv = (signal(bx, SIG_DFL) == SIG_ERR);
- else if( cx == 1 ) rv = (signal(bx, SIG_IGN) == SIG_ERR);
+ if( cx == 0 ) oldsig = signal(bx, SIG_DFL);
+ else if( cx == 1 ) oldsig = signal(bx, SIG_IGN);
else
{
elks_sigtrap = cx;
- rv = (signal(bx, sig_trap) == SIG_ERR);
+ oldsig = signal(bx, sig_trap);
}
-
- return -rv;
+ if( oldsig == SIG_ERR) return -1;
+ if( oldsig == SIG_DFL) return 0;
+ if( oldsig == SIG_IGN) return 1;
+ return 2;
}