projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed return value; must be from table if signal() returns sig_trap. DLW
[unix-history]
/
usr
/
src
/
usr.bin
/
f77
/
libU77
/
signal_.c
diff --git
a/usr/src/usr.bin/f77/libU77/signal_.c
b/usr/src/usr.bin/f77/libU77/signal_.c
index
056930d
..
718f1b1
100644
(file)
--- 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
*
*
* change the action for a specified signal
*
@@
-31,17
+31,26
@@
long signal_(sigp, procp, flag)
long *sigp, *flag;
int (*procp)();
{
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;
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 */
}
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)
}
sig_trap(sn)