Browse Source

--- Merging r19810 into '.':
U rtl/os2/systhrd.inc
--- Merging r19811 into '.':
U rtl/os2/doscalls.pas

# revisions: 19810,19811
------------------------------------------------------------------------
r19810 | hajny | 2011-12-11 01:46:16 +0100 (Sun, 11 Dec 2011) | 1 line
Changed paths:
M /trunk/rtl/os2/systhrd.inc

* boolean must not be used for DosCalls API parameters
------------------------------------------------------------------------
------------------------------------------------------------------------
r19811 | hajny | 2011-12-11 01:46:55 +0100 (Sun, 11 Dec 2011) | 1 line
Changed paths:
M /trunk/rtl/os2/doscalls.pas

* boolean must not be used for DosCalls API parameters
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_6@19813 -

marco 13 years ago
parent
commit
bc117233d1
2 changed files with 108 additions and 57 deletions
  1. 68 39
      rtl/os2/doscalls.pas
  2. 40 18
      rtl/os2/systhrd.inc

+ 68 - 39
rtl/os2/doscalls.pas

@@ -1539,11 +1539,11 @@ function DosSetFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSinfo;
 {Check if verify mode is enabled.}
 {Check if verify mode is enabled.}
 function DosQueryVerify (var Enabled: longint): cardinal; cdecl;
 function DosQueryVerify (var Enabled: longint): cardinal; cdecl;
 function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
 function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
-function DosQueryVerify (var Enabled: boolean): cardinal; cdecl;
+function DosQueryVerify (var Enabled: boolean): cardinal;
 
 
 {Turn the verify mode on or off.}
 {Turn the verify mode on or off.}
 function DosSetVerify (Enable: cardinal): cardinal; cdecl;
 function DosSetVerify (Enable: cardinal): cardinal; cdecl;
-function DosSetVerify (Enable: boolean): cardinal; cdecl;
+function DosSetVerify (Enable: boolean): cardinal;
 
 
 {Change the number of filehandles our program can open. (Default=50). It
 {Change the number of filehandles our program can open. (Default=50). It
  won't hurt if there are files open when you are calling this.}
  won't hurt if there are files open when you are calling this.}
@@ -1892,7 +1892,7 @@ function DosCreateEventSem (Name: PChar;var Handle: THandle;
 function DosCreateEventSem (const Name: string; var Handle: THandle;
 function DosCreateEventSem (const Name: string; var Handle: THandle;
                             Attr, State: cardinal): cardinal;
                             Attr, State: cardinal): cardinal;
 function DosCreateEventSem (Name: PChar;var Handle: THandle;
 function DosCreateEventSem (Name: PChar;var Handle: THandle;
-                            Attr: cardinal; State: boolean): cardinal; cdecl;
+                            Attr: cardinal; State: boolean): cardinal;
 function DosCreateEventSem (const Name: string; var Handle: THandle;
 function DosCreateEventSem (const Name: string; var Handle: THandle;
                             Attr: cardinal; State: boolean): cardinal;
                             Attr: cardinal; State: boolean): cardinal;
 
 
@@ -1948,7 +1948,7 @@ function DosQueryEventSem (Handle: THandle; var Posted: cardinal): cardinal;
  Attr       = One or more of the smXXXX constants.
  Attr       = One or more of the smXXXX constants.
  State      = Initial state: (0/false=Not owned, 1/true=Owned.)}
  State      = Initial state: (0/false=Not owned, 1/true=Owned.)}
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
-                            Attr: cardinal; State: boolean): cardinal; cdecl;
+                            Attr: cardinal; State: boolean): cardinal;
 function DosCreateMutExSem (const Name: string; var Handle: THandle;
 function DosCreateMutExSem (const Name: string; var Handle: THandle;
                             Attr: cardinal; State: boolean): cardinal;
                             Attr: cardinal; State: boolean): cardinal;
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
@@ -2513,7 +2513,7 @@ function DosSetSignalExceptionFocus(Enable:longint;var Times:longint):cardinal;
 function DosSetSignalExceptionFocus (Enable: cardinal;
 function DosSetSignalExceptionFocus (Enable: cardinal;
                                          var Times: cardinal): cardinal; cdecl;
                                          var Times: cardinal): cardinal; cdecl;
 function DosSetSignalExceptionFocus (Enable: boolean;
 function DosSetSignalExceptionFocus (Enable: boolean;
-                                         var Times: cardinal): cardinal; cdecl;
+                                                var Times: cardinal): cardinal;
 
 
 {Tell OS/2 that if an exception occurs, it must queue it up, until a
 {Tell OS/2 that if an exception occurs, it must queue it up, until a
  DosExitMustComplete follows. Urgent exceptions still occur. The only
  DosExitMustComplete follows. Urgent exceptions still occur. The only
@@ -2612,7 +2612,7 @@ function DosPeekQueue(Handle:longint;var ReqBuffer:TRequestData;
 function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
 function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var Element: cardinal; Wait: boolean;
                        var Element: cardinal; Wait: boolean;
-                       var Priority: byte; ASem: THandle): cardinal; cdecl;
+                       var Priority: byte; ASem: THandle): cardinal;
 function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
 function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var Element: cardinal; Wait: cardinal;
                        var Element: cardinal; Wait: cardinal;
@@ -2650,7 +2650,7 @@ function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
                       var DataLen: cardinal; var DataPtr: pointer;
                       var DataLen: cardinal; var DataPtr: pointer;
                       Element: cardinal; Wait: boolean; var Priority: byte;
                       Element: cardinal; Wait: boolean; var Priority: byte;
-                      ASem: THandle): cardinal; cdecl;
+                      ASem: THandle): cardinal;
 
 
 {Write a data record to a queue.
 {Write a data record to a queue.
  Handle         = Handle of queue to write to.
  Handle         = Handle of queue to write to.
@@ -4705,15 +4705,24 @@ external 'DOSCALLS' index 225;
 function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
 function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
 external 'DOSCALLS' index 225;
 external 'DOSCALLS' index 225;
 
 
-function DosQueryVerify (var Enabled: boolean): cardinal; cdecl;
-external 'DOSCALLS' index 225;
-
-function DosSetVerify (Enable: boolean): cardinal; cdecl;
-external 'DOSCALLS' index 210;
+function DosQueryVerify (var Enabled: boolean): cardinal;
+var
+  En: cardinal;
+  RC: cardinal;
+begin
+  RC := DosQueryVerify (En);
+  Enabled := boolean (En);
+  DosQueryVerify := RC;
+end;
 
 
 function DosSetVerify (Enable: cardinal): cardinal; cdecl;
 function DosSetVerify (Enable: cardinal): cardinal; cdecl;
 external 'DOSCALLS' index 210;
 external 'DOSCALLS' index 210;
 
 
+function DosSetVerify (Enable: boolean): cardinal;
+begin
+  DosSetVerify := DosSetVerify (cardinal (Enable));
+end;
+
 function DosSetMaxFH (Count: cardinal): cardinal; cdecl;
 function DosSetMaxFH (Count: cardinal): cardinal; cdecl;
 external 'DOSCALLS' index 209;
 external 'DOSCALLS' index 209;
 
 
@@ -4812,8 +4821,11 @@ function DosCreateEventSem (Name: PChar; var Handle: THandle;
 external 'DOSCALLS' index 324;
 external 'DOSCALLS' index 324;
 
 
 function DosCreateEventSem (Name: PChar; var Handle: THandle;
 function DosCreateEventSem (Name: PChar; var Handle: THandle;
-                            Attr: cardinal; State: boolean): cardinal; cdecl;
-external 'DOSCALLS' index 324;
+                            Attr: cardinal; State: boolean): cardinal;
+begin
+  DosCreateEventSem :=
+                      DosCreateEventSem (Name, Handle, Attr, cardinal (State));
+end;
 
 
 function DosCreateEventSem (const Name: string; var Handle: THandle;
 function DosCreateEventSem (const Name: string; var Handle: THandle;
                             Attr: cardinal; State: boolean): cardinal;
                             Attr: cardinal; State: boolean): cardinal;
@@ -4821,20 +4833,22 @@ function DosCreateEventSem (const Name: string; var Handle: THandle;
 var T:array[0..255] of char;
 var T:array[0..255] of char;
 
 
 begin
 begin
-    if Name<>'' then
-        begin
-            StrPCopy(@T,Name);
-            DosCreateEventSem:=DosCreateEventSem(@T,Handle,Attr,State);
-        end
-    else
-        DosCreateEventSem:=DosCreateEventSem(nil,Handle,Attr,State);
+  if Name<>'' then
+   begin
+    StrPCopy(@T,Name);
+    DosCreateEventSem :=
+                        DosCreateEventSem (@T, Handle, Attr, cardinal (State));
+   end
+  else
+   DosCreateEventSem :=
+                       DosCreateEventSem (nil, Handle, Attr, cardinal (State));
 end;
 end;
 
 
 function DosCreateEventSem (const Name: string; var Handle: THandle;
 function DosCreateEventSem (const Name: string; var Handle: THandle;
                             Attr, State: cardinal): cardinal;
                             Attr, State: cardinal): cardinal;
 
 
 begin
 begin
-    DosCreateEventSem:=DosCreateEventSem(Name,Handle,Attr,boolean(State));
+  DosCreateEventSem := DosCreateEventSem (Name, Handle, Attr, boolean (State));
 end;
 end;
 
 
 function DosOpenEventSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 function DosOpenEventSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
@@ -4873,12 +4887,15 @@ function DosQueryEventSem (Handle: THandle; var Posted: cardinal): cardinal;
 external 'DOSCALLS' index 330;
 external 'DOSCALLS' index 330;
 
 
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
-                            Attr: cardinal; State:boolean): cardinal; cdecl;
+                            Attr, State: cardinal): cardinal; cdecl;
 external 'DOSCALLS' index 331;
 external 'DOSCALLS' index 331;
 
 
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 function DosCreateMutExSem (Name: PChar; var Handle: THandle;
-                            Attr, State: cardinal): cardinal; cdecl;
-external 'DOSCALLS' index 331;
+                            Attr: cardinal; State: boolean): cardinal;
+begin
+  DosCreateMutExSem :=
+                      DosCreateMutExSem (Name, Handle, Attr, cardinal (State));
+end;
 
 
 function DosCreateMutExSem (const Name: string; var Handle: THandle;
 function DosCreateMutExSem (const Name: string; var Handle: THandle;
                             Attr: cardinal; State: boolean): cardinal;
                             Attr: cardinal; State: boolean): cardinal;
@@ -4886,20 +4903,23 @@ function DosCreateMutExSem (const Name: string; var Handle: THandle;
 var T:array[0..255] of char;
 var T:array[0..255] of char;
 
 
 begin
 begin
-    if Name<>'' then
-        begin
-            StrPCopy(@T,Name);
-            DosCreateMutExSem:=DosCreateMutExSem(@T,Handle,Attr,State);
-        end
-    else
-        DosCreateMutExSem:=DosCreateMutExSem(nil,Handle,Attr,State);
+  if Name<>'' then
+   begin
+    StrPCopy(@T,Name);
+    DosCreateMutExSem :=
+                        DosCreateMutExSem (@T, Handle, Attr, cardinal (State));
+   end
+  else
+   DosCreateMutExSem :=
+                       DosCreateMutExSem (nil, Handle, Attr, cardinal (State));
 end;
 end;
 
 
 function DosCreateMutExSem (const Name: string; var Handle: THandle;
 function DosCreateMutExSem (const Name: string; var Handle: THandle;
                             Attr, State: cardinal): cardinal;
                             Attr, State: cardinal): cardinal;
 
 
 begin
 begin
-    DosCreateMutExSem:=DosCreateMutExSem(Name,Handle,Attr,boolean(State));
+    DosCreateMutExSem :=
+                       DosCreateMutExSem (Name, Handle, Attr, boolean (State));
 end;
 end;
 
 
 function DosOpenMutExSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 function DosOpenMutExSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
@@ -5218,8 +5238,11 @@ function DosSetSignalExceptionFocus (Enable: cardinal;
 external 'DOSCALLS' index 378;
 external 'DOSCALLS' index 378;
 
 
 function DosSetSignalExceptionFocus (Enable: boolean;
 function DosSetSignalExceptionFocus (Enable: boolean;
-                                         var Times: cardinal): cardinal; cdecl;
-external 'DOSCALLS' index 378;
+                                                var Times: cardinal): cardinal;
+begin
+  DosSetSignalExceptionFocus :=
+                         DosSetSignalExceptionFocus (cardinal (Enable), Times);
+end;
 
 
 function DosEnterMustComplete(var Nesting:longint):cardinal; cdecl;
 function DosEnterMustComplete(var Nesting:longint):cardinal; cdecl;
 external 'DOSCALLS' index 380;
 external 'DOSCALLS' index 380;
@@ -5296,8 +5319,11 @@ external 'QUECALLS' index 13;
 function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
 function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var Element: cardinal; Wait: boolean;
                        var Element: cardinal; Wait: boolean;
-                       var Priority: byte; ASem: THandle): cardinal; cdecl;
-external 'QUECALLS' index 13;
+                       var Priority: byte; ASem: THandle): cardinal;
+begin
+  DosPeekQueue := DosPeekQueue (Handle, ReqBuffer, DataLen, DataPtr, Element,
+                                              cardinal (Wait), Priority, ASem);
+end;
 
 
 function DosPurgeQueue (Handle: THandle): cardinal; cdecl;
 function DosPurgeQueue (Handle: THandle): cardinal; cdecl;
 external 'QUECALLS' index 10;
 external 'QUECALLS' index 10;
@@ -5323,8 +5349,11 @@ external 'QUECALLS' index 9;
 function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
                        var DataLen: cardinal; var DataPtr: pointer;
                        var DataLen: cardinal; var DataPtr: pointer;
                        Element: cardinal; Wait: boolean; var Priority: byte;
                        Element: cardinal; Wait: boolean; var Priority: byte;
-                       ASem: THandle): cardinal; cdecl;
-external 'QUECALLS' index 9;
+                       ASem: THandle): cardinal;
+begin
+  DosReadQueue := DosReadQueue (Handle, ReqBuffer, DataLen, DataPtr, Element,
+                                              cardinal (Wait), Priority, ASem);
+end;
 
 
 function DosWriteQueue (Handle: THandle; Request, DataLen: cardinal;
 function DosWriteQueue (Handle: THandle; Request, DataLen: cardinal;
                         var DataBuf; Priority: cardinal): cardinal; cdecl;
                         var DataBuf; Priority: cardinal): cardinal; cdecl;

+ 40 - 18
rtl/os2/systhrd.inc

@@ -111,7 +111,7 @@ function DosCreateThread (var TID: cardinal; Address: pointer;
                                                  external 'DOSCALLS' index 311;
                                                  external 'DOSCALLS' index 311;
 
 
 function DosCreateMutExSem (Name: PChar; var Handle: THandle; Attr: cardinal;
 function DosCreateMutExSem (Name: PChar; var Handle: THandle; Attr: cardinal;
-               State: boolean): cardinal; cdecl; external 'DOSCALLS' index 331;
+              State: cardinal): cardinal; cdecl; external 'DOSCALLS' index 331;
 
 
 function DosCloseMutExSem (Handle: THandle): cardinal; cdecl;
 function DosCloseMutExSem (Handle: THandle): cardinal; cdecl;
                                                  external 'DOSCALLS' index 333;
                                                  external 'DOSCALLS' index 333;
@@ -148,7 +148,7 @@ function DosSetPriority (Scope, TrClass: cardinal; Delta: longint;
                                                  external 'DOSCALLS' index 236;
                                                  external 'DOSCALLS' index 236;
 
 
 function DosCreateEventSem (Name: PChar; var Handle: THandle;
 function DosCreateEventSem (Name: PChar; var Handle: THandle;
-                             Attr: cardinal; State: boolean): cardinal; cdecl;
+                             Attr: cardinal; State: cardinal): cardinal; cdecl;
                                                  external 'DOSCALLS' index 324;
                                                  external 'DOSCALLS' index 324;
 
 
 function DosCloseEventSem (Handle: THandle): cardinal; cdecl;
 function DosCloseEventSem (Handle: THandle): cardinal; cdecl;
@@ -530,7 +530,7 @@ end;
 
 
 procedure SysInitCriticalSection (var CS);
 procedure SysInitCriticalSection (var CS);
 begin
 begin
-  if DosCreateMutExSem (nil, THandle (CS), 0, false) <> 0 then
+  if DosCreateMutExSem (nil, THandle (CS), 0, 0) <> 0 then
    FPC_ThreadError;
    FPC_ThreadError;
 end;
 end;
 
 
@@ -598,11 +598,15 @@ begin
    Attr := 0
    Attr := 0
   else
   else
    Attr := DCE_AutoReset;
    Attr := DCE_AutoReset;
-  RC := DosCreateEventSem (PChar (Name2), PLocalEventRec (Result)^.FHandle,
-                                                           Attr, InitialState);
+  if Name2 = '' then
+   RC := DosCreateEventSem (nil, PLocalEventRec (Result)^.FHandle,
+                                                 Attr, cardinal (InitialState))
+  else
+   RC := DosCreateEventSem (PChar (Name2), PLocalEventRec (Result)^.FHandle,
+                                                Attr, cardinal (InitialState));
   if RC <> 0 then
   if RC <> 0 then
    begin
    begin
-    FreeMem (Result);
+    Dispose (PLocalEventRec (Result));
     FPC_ThreadError;
     FPC_ThreadError;
    end;
    end;
 end;
 end;
@@ -610,8 +614,13 @@ end;
 
 
 procedure SysBasicEventDestroy (State: PEventState);
 procedure SysBasicEventDestroy (State: PEventState);
 begin
 begin
-  DosCloseEventSem (PLocalEventRec (State)^.FHandle);
-  Dispose (PLocalEventRec (State));
+  if State = nil then
+   FPC_ThreadError
+  else
+   begin
+    DosCloseEventSem (PLocalEventRec (State)^.FHandle);
+    Dispose (PLocalEventRec (State));
+   end;
 end;
 end;
 
 
 
 
@@ -619,13 +628,21 @@ procedure SysBasicEventResetEvent (State: PEventState);
 var
 var
   PostCount: cardinal;
   PostCount: cardinal;
 begin
 begin
-  DosResetEventSem (PLocalEventRec (State)^.FHandle, PostCount);
+  if State = nil then
+   FPC_ThreadError
+  else
+(* In case of later addition of error checking:    *)
+(* RC 300 = Error_Already_Reset which would be OK. *)
+   DosResetEventSem (PLocalEventRec (State)^.FHandle, PostCount);
 end;
 end;
 
 
 
 
 procedure SysBasicEventSetEvent (State: PEventState);
 procedure SysBasicEventSetEvent (State: PEventState);
 begin
 begin
-  DosPostEventSem (PLocalEventRec (State)^.FHandle);
+  if State = nil then
+   FPC_ThreadError
+  else
+   DosPostEventSem (PLocalEventRec (State)^.FHandle);
 end;
 end;
 
 
 
 
@@ -633,23 +650,28 @@ function SysBasicEventWaitFor (Timeout: Cardinal; State: PEventState): longint;
 var
 var
   RC: cardinal;
   RC: cardinal;
 begin
 begin
-  RC := DosWaitEventSem (PLocalEventRec (State)^.FHandle, Timeout);
-  case RC of
-   0: Result := wrSignaled;
-   Error_Timeout: Result := wrTimeout;
+  if State = nil then
+   FPC_ThreadError
   else
   else
    begin
    begin
-    Result := wrError;
-    PLocalEventRec (State)^.FLastError := RC;
+    RC := DosWaitEventSem (PLocalEventRec (State)^.FHandle, Timeout);
+    case RC of
+     0: Result := wrSignaled;
+     Error_Timeout: Result := wrTimeout;
+    else
+     begin
+      Result := wrError;
+      PLocalEventRec (State)^.FLastError := RC;
+     end;
+    end;
    end;
    end;
-  end;
 end;
 end;
 
 
 
 
 function SysRTLEventCreate: PRTLEvent;
 function SysRTLEventCreate: PRTLEvent;
 begin
 begin
   Result := PRTLEvent (-1);
   Result := PRTLEvent (-1);
-  DosCreateEventSem (nil, THandle (Result), dce_AutoReset, false);
+  DosCreateEventSem (nil, THandle (Result), dce_AutoReset, 0);
 end;
 end;