Browse Source

* sigset functions more flexible, small changes to sys_time

marco 23 years ago
parent
commit
cd427582de
2 changed files with 22 additions and 12 deletions
  1. 14 7
      rtl/bsd/bsdfuncs.inc
  2. 8 5
      rtl/bsd/bsdsysc.inc

+ 14 - 7
rtl/bsd/bsdfuncs.inc

@@ -38,7 +38,11 @@ begin
 end;
 end;
 
 
 Const 
 Const 
-   SIG_MAXSIG = 128;
+   SIG_MAXSIG      = 128;
+   wordsinsigset   = 4;
+   ln2bitsinword   = 5;    { 32bit : ln(32)/ln(2)=5 } 
+
+   ln2bitmask	   = 2 shl ln2bitsinword -1;
    
    
 function sys_sigaddset(var _set : sigset_t;signo:cint): cint;
 function sys_sigaddset(var _set : sigset_t;signo:cint): cint;
 
 
@@ -48,7 +52,7 @@ Begin
        seterrno(sys_EINVAL);
        seterrno(sys_EINVAL);
        exit(-1);
        exit(-1);
      End;
      End;
-   _set[(signo-1) shr 5]:=_set[(signo-1) shr 5] OR (1 shl ((signo-1) and 31));
+   _set[(signo-1) shr ln2bitsinword]:=_set[(signo-1) shr ln2bitsinword] OR (1 shl ((signo-1) and ln2bitmask));
    sys_sigaddset:=0;
    sys_sigaddset:=0;
 End;   
 End;   
 
 
@@ -60,7 +64,7 @@ Begin
        seterrno(sys_EINVAL);
        seterrno(sys_EINVAL);
        exit(-1);
        exit(-1);
      End;
      End;
-   _set[(signo-1) shr 5]:=_set[(signo-1) shr 5] AND NOT (1 shl ((signo-1) and 31));
+   _set[(signo-1) shr ln2bitsinword]:=_set[(signo-1) shr ln2bitsinword] AND NOT (1 shl ((signo-1) and ln2bitmask));
    sys_sigdelset:=0;
    sys_sigdelset:=0;
 End;
 End;
 
 
@@ -69,7 +73,7 @@ function sys_sigemptyset(var _set : sigset_t):cint;
 var i :longint;
 var i :longint;
 
 
 Begin
 Begin
-  for i:=0 to 3 DO _set[i]:=0;
+  for i:=0 to wordsinsigset-1 DO _set[i]:=0;
   sys_sigemptyset:=0;
   sys_sigemptyset:=0;
 End;
 End;
 
 
@@ -78,7 +82,7 @@ function sys_sigfillset(var _set : sigset_t):cint;
 var i :longint;
 var i :longint;
 
 
 Begin
 Begin
-  for i:=0 to 3 DO _set[i]:=NOT 0;
+  for i:=0 to wordsinsignset DO _set[i]:=NOT 0;
   sys_sigfillset:=0;
   sys_sigfillset:=0;
 End;
 End;
 
 
@@ -90,7 +94,7 @@ Begin
        seterrno(sys_EINVAL);
        seterrno(sys_EINVAL);
        exit(-1);
        exit(-1);
      End;
      End;
-    if ((_set[(signo-1) shr 5]) and (1 shl ((signo-1) and 31)))>0 Then
+    if ((_set[(signo-1) shr ln2bitsinword]) and (1 shl ((signo-1) and ln2bitmask)))>0 Then
      sys_sigismember:=1
      sys_sigismember:=1
     else 
     else 
      sys_sigismember:=0;
      sys_sigismember:=0;
@@ -511,7 +515,10 @@ end;
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.8  2002-10-27 17:21:29  marco
+ Revision 1.9  2002-11-13 18:15:08  marco
+  * sigset functions more flexible, small changes to sys_time
+
+ Revision 1.8  2002/10/27 17:21:29  marco
   * Only "difficult" functions + execvp + termios + rewinddir left to do
   * Only "difficult" functions + execvp + termios + rewinddir left to do
 
 
  Revision 1.7  2002/10/27 11:58:29  marco
  Revision 1.7  2002/10/27 11:58:29  marco

+ 8 - 5
rtl/bsd/bsdsysc.inc

@@ -23,7 +23,7 @@
 {   var
 {   var
      Errno : cint; external name 'errno';}
      Errno : cint; external name 'errno';}
 
 
-    function sys_time(var tloc:time_t): time_t; cdecl; external name 'time';
+    function sys_time(tloc:ptime_t): time_t; cdecl; external name 'time';
     function sys_open(const path: pchar; flags : cint; mode: mode_t):cint; cdecl; external name 'open';
     function sys_open(const path: pchar; flags : cint; mode: mode_t):cint; cdecl; external name 'open';
     function sys_close(fd : cint): cint; cdecl; external name 'close';
     function sys_close(fd : cint): cint; cdecl; external name 'close';
     function sys_lseek(fd : cint; offset : off_t; whence : cint): off_t; cdecl; external name 'lseek';
     function sys_lseek(fd : cint; offset : off_t; whence : cint): off_t; cdecl; external name 'lseek';
@@ -71,7 +71,7 @@
 
 
 // Should be moved to a FreeBSD specific unit in the future.
 // Should be moved to a FreeBSD specific unit in the future.
 
 
-function sys_time(var tloc:time_t): time_t; [public, alias : 'FPC_SYSC_TIME'];
+function sys_time( tloc:ptime_t): time_t; [public, alias : 'FPC_SYSC_TIME'];
 
 
 VAR tv     : timeval;
 VAR tv     : timeval;
     tz     : timezone;
     tz     : timezone;
@@ -83,8 +83,8 @@ begin
    sys_time:=-1
    sys_time:=-1
   else
   else
    Begin
    Begin
-//    If Assigned(tloc) Then
-     TLoc:=tv.tv_sec;
+   If Assigned(tloc) Then
+     TLoc^:=tv.tv_sec;
     sys_time:=tv.tv_sec;
     sys_time:=tv.tv_sec;
    End;
    End;
 End;
 End;
@@ -574,7 +574,10 @@ end;
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.8  2002-10-27 17:21:29  marco
+ Revision 1.9  2002-11-13 18:15:08  marco
+  * sigset functions more flexible, small changes to sys_time
+
+ Revision 1.8  2002/10/27 17:21:29  marco
   * Only "difficult" functions + execvp + termios + rewinddir left to do
   * Only "difficult" functions + execvp + termios + rewinddir left to do
 
 
  Revision 1.7  2002/10/27 11:58:29  marco
  Revision 1.7  2002/10/27 11:58:29  marco