From ba578a61e0b1a3fae5556575c5bc06a87d9fef4f Mon Sep 17 00:00:00 2001 From: David Wasley Date: Fri, 20 Feb 1981 03:40:34 -0800 Subject: [PATCH] fixed return value; must be from table if signal() returns sig_trap. DLW SCCS-vsn: usr.bin/f77/libU77/signal_.c 1.3 --- usr/src/usr.bin/f77/libU77/signal_.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/usr/src/usr.bin/f77/libU77/signal_.c b/usr/src/usr.bin/f77/libU77/signal_.c index 056930d6b9..718f1b10dd 100644 --- a/usr/src/usr.bin/f77/libU77/signal_.c +++ b/usr/src/usr.bin/f77/libU77/signal_.c @@ -1,5 +1,5 @@ /* -char id_signal[] = "@(#)signal_.c 1.2"; +char id_signal[] = "@(#)signal_.c 1.3"; * * change the action for a specified signal * @@ -31,17 +31,26 @@ long signal_(sigp, procp, flag) long *sigp, *flag; int (*procp)(); { + int (*oldsig)(); + int (*oldispatch)(); + + oldispatch = dispatch[*sigp]; + if (*sigp < 0 || *sigp > 16) return(-((long)(errno=F_ERARG))); if (*flag < 0) /* function address passed */ { dispatch[*sigp] = procp; - return((long)signal((int)*sigp, sig_trap) ); + oldsig = signal((int)*sigp, sig_trap); } else /* integer value passed */ - return((long)signal((int)*sigp, (int)*flag) ); + oldsig = signal((int)*sigp, (int)*flag); + + if (oldsig == sig_trap) + return((long)oldispatch); + return((long)oldsig); } sig_trap(sn) -- 2.20.1