diff options
author | Alan Burlison <Alan.Burlison@uk.sun.com> | 2004-07-19 13:07:02 +0100 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-08-04 07:18:49 +0000 |
commit | b13bbac74f763cf278bfb06cd617733e42684c46 (patch) | |
tree | 91f111733695aff44eb8f281b0a41a79f165e496 /ext/POSIX | |
parent | 112dcc46caa17a77552bb7535e1be2c9417728e7 (diff) | |
download | perl-b13bbac74f763cf278bfb06cd617733e42684c46.tar.gz |
Re: POSIX::sigprocmask implemented incorrectly
Message-ID: <40FBAB56.1030208@sun.com>
(last chunk only)
p4raw-id: //depot/perl@23194
Diffstat (limited to 'ext/POSIX')
-rw-r--r-- | ext/POSIX/POSIX.xs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs index d56c379588..c6a6114a72 100644 --- a/ext/POSIX/POSIX.xs +++ b/ext/POSIX/POSIX.xs @@ -1390,20 +1390,25 @@ sigpending(sigset) SysRet sigprocmask(how, sigset, oldsigset = 0) int how - POSIX::SigSet sigset + POSIX::SigSet sigset = NO_INIT POSIX::SigSet oldsigset = NO_INIT INIT: - if ( items < 3 ) { - oldsigset = 0; + if (SvTYPE(ST(1)) == SVt_NULL) { + sigset = NULL; + } else if (sv_derived_from(ST(1), "POSIX::SigSet")) { + IV tmp = SvIV((SV*)SvRV(ST(1))); + sigset = INT2PTR(POSIX__SigSet,tmp); + } else { + croak("sigset is not of type POSIX::SigSet"); } - else if (sv_derived_from(ST(2), "POSIX::SigSet")) { + + if ( items < 3 || SvTYPE(ST(2)) == SVt_NULL) { + oldsigset = NULL; + } else if (sv_derived_from(ST(2), "POSIX::SigSet")) { IV tmp = SvIV((SV*)SvRV(ST(2))); oldsigset = INT2PTR(POSIX__SigSet,tmp); - } - else { - New(0, oldsigset, 1, sigset_t); - sigemptyset(oldsigset); - sv_setref_pv(ST(2), "POSIX::SigSet", (void*)oldsigset); + } else { + croak("oldsigset is not of type POSIX::SigSet"); } SysRet |