[fpc-pascal]sigaddset, sigfillset, sigaddset, sigdelset, sigismember... all missing?
Michael Van Canneyt
michael.vancanneyt at wisa.be
Mon Jun 2 11:20:53 CEST 2003
On Mon, 2 Jun 2003, Stephen Hurd wrote:
> I can't seem to find any correct way of manipulating SigSets in freepascal...
> although sigprocmask and sigpending are implemented, how have these been
> tested? How am I supposed to add something to a sigmask?
They have not been implemented but it should be easy to do it yourself,
it's just setting some bits in an array.
in the 1.1 version, the functions have been implemented. Here is the
implementation:
function fpsigaddset(var nset : tsigset;signo:cint): cint;
Begin
if (signo<=0) or (signo > SIG_MAXSIG) Then
Begin
seterrno(ESysEINVAL);
exit(-1);
End;
nset[(signo-1) shr ln2bitsinword]:=nset[(signo-1) shr ln2bitsinword] OR (1 shl ((signo-1) and ln2bitmask));
fpsigaddset:=0;
End;
function fpsigdelset(var nset : tsigset;signo:cint): cint;
Begin
if (signo<=0) or (signo > SIG_MAXSIG) Then
Begin
seterrno(ESysEINVAL);
exit(-1);
End;
nset[(signo-1) shr ln2bitsinword]:=nset[(signo-1) shr ln2bitsinword] AND NOT (1 shl ((signo-1) and ln2bitmask));
fpsigdelset:=0;
End;
function fpsigemptyset(var nset : tsigset):cint;
var i :longint;
Begin
for i:=0 to wordsinsigset-1 DO nset[i]:=0;
fpsigemptyset:=0;
End;
function fpsigfillset(var nset : tsigset):cint;
var i :longint;
Begin
for i:=0 to wordsinsigset DO nset[i]:=NOT 0;
fpsigfillset:=0;
End;
function fpsigismember(const nset : tsigset;signo:cint): cint;
Begin
if (signo<=0) or (signo > SIG_MAXSIG) Then
Begin
seterrno(ESysEINVAL);
exit(-1);
End;
if ((nset[(signo-1) shr ln2bitsinword]) and (1 shl ((signo-1) and ln2bitmask)))>0 Then
fpsigismember:=1
else
fpsigismember:=0;
End;
Michael.
More information about the fpc-pascal
mailing list