mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 10:39:18 +02:00
* Unix reform stage III aftermath
This commit is contained in:
parent
ca5e37d040
commit
f704b06638
@ -43,7 +43,7 @@ implementation
|
|||||||
{$ifdef VER1_0}
|
{$ifdef VER1_0}
|
||||||
uses Linux;
|
uses Linux;
|
||||||
{$else}
|
{$else}
|
||||||
uses Unix;
|
uses baseunix,Unix;
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
const
|
const
|
||||||
@ -76,7 +76,7 @@ begin
|
|||||||
while Assigned(IOCallback) do
|
while Assigned(IOCallback) do
|
||||||
begin
|
begin
|
||||||
if (IOCallback^.SavedHandleFlags and Open_NonBlock) = 0 then
|
if (IOCallback^.SavedHandleFlags and Open_NonBlock) = 0 then
|
||||||
fcntl(IOCallback^.IOHandle, F_SetFl, IOCallback^.SavedHandleFlags);
|
{$ifdef VER1_0}fcntl{$else}fpfcntl{$endif}(IOCallback^.IOHandle, F_SetFl, IOCallback^.SavedHandleFlags);
|
||||||
IOCallback := IOCallback^.Next;
|
IOCallback := IOCallback^.Next;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -92,12 +92,12 @@ var
|
|||||||
begin
|
begin
|
||||||
if Handle^.Data.HighestHandle < 0 then
|
if Handle^.Data.HighestHandle < 0 then
|
||||||
// No I/O checks to do, so just wait...
|
// No I/O checks to do, so just wait...
|
||||||
AsyncResult := Select(0, nil, nil, nil, TimeOut)
|
AsyncResult := {$ifdef VER1_0}Select{$else}fpselect{$endif}(0, nil, nil, nil, TimeOut)
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
CurReadFDSet := PFDSet(Handle^.Data.FDData)[0];
|
CurReadFDSet := PFDSet(Handle^.Data.FDData)[0];
|
||||||
CurWriteFDSet := PFDSet(Handle^.Data.FDData)[1];
|
CurWriteFDSet := PFDSet(Handle^.Data.FDData)[1];
|
||||||
AsyncResult := Select(Handle^.Data.HighestHandle + 1,
|
AsyncResult := {$ifdef VER1_0}Select{$else}fpselect{$endif}(Handle^.Data.HighestHandle + 1,
|
||||||
@CurReadFDSet, @CurWriteFDSet, nil, TimeOut);
|
@CurReadFDSet, @CurWriteFDSet, nil, TimeOut);
|
||||||
|
|
||||||
if AsyncResult > 0 then
|
if AsyncResult > 0 then
|
||||||
@ -108,8 +108,8 @@ begin
|
|||||||
begin
|
begin
|
||||||
CurIOCallback := PIOCallbackData(Handle^.Data.CurIOCallback);
|
CurIOCallback := PIOCallbackData(Handle^.Data.CurIOCallback);
|
||||||
Handle^.Data.NextIOCallback := CurIOCallback^.Next;
|
Handle^.Data.NextIOCallback := CurIOCallback^.Next;
|
||||||
if FD_IsSet(CurIOCallback^.IOHandle, CurReadFDSet) and
|
if ({$ifdef VER1_0}FD_IsSet{$else}fpFD_ISSET{$endif}(CurIOCallback^.IOHandle,CurReadFDSet)>=0) and
|
||||||
FD_IsSet(CurIOCallback^.IOHandle, PFDSet(Handle^.Data.FDData)[0]) and
|
({$ifdef VER1_0}FD_IsSet{$else}fpFD_ISSET{$endif}(CurIOCallback^.IOHandle, PFDSet(Handle^.Data.FDData)[0])>=0) and
|
||||||
Assigned(CurIOCallback^.ReadCallback) then
|
Assigned(CurIOCallback^.ReadCallback) then
|
||||||
begin
|
begin
|
||||||
CurIOCallback^.ReadCallback(CurIOCallback^.ReadUserData);
|
CurIOCallback^.ReadCallback(CurIOCallback^.ReadUserData);
|
||||||
@ -119,8 +119,8 @@ begin
|
|||||||
|
|
||||||
CurIOCallback := PIOCallbackData(Handle^.Data.CurIOCallback);
|
CurIOCallback := PIOCallbackData(Handle^.Data.CurIOCallback);
|
||||||
if Assigned(CurIOCallback) and
|
if Assigned(CurIOCallback) and
|
||||||
FD_IsSet(CurIOCallback^.IOHandle, CurWriteFDSet) and
|
({$ifdef VER1_0}FD_IsSet{$else}fpFD_ISSET{$endif}(CurIOCallback^.IOHandle, CurWriteFDSet)>=0) and
|
||||||
FD_IsSet(CurIOCallback^.IOHandle, PFDSet(Handle^.Data.FDData)[1]) and
|
({$ifdef VER1_0}FD_IsSet{$else}fpFD_ISSET{$endif}(CurIOCallback^.IOHandle, PFDSet(Handle^.Data.FDData)[1])>=0) and
|
||||||
Assigned(CurIOCallback^.WriteCallback) then
|
Assigned(CurIOCallback^.WriteCallback) then
|
||||||
begin
|
begin
|
||||||
CurIOCallback^.WriteCallback(CurIOCallback^.WriteUserData);
|
CurIOCallback^.WriteCallback(CurIOCallback^.WriteUserData);
|
||||||
@ -144,15 +144,15 @@ begin
|
|||||||
if not Assigned(Handle^.Data.FDData) then
|
if not Assigned(Handle^.Data.FDData) then
|
||||||
begin
|
begin
|
||||||
GetMem(Handle^.Data.FDData, SizeOf(TFDSet) * 2);
|
GetMem(Handle^.Data.FDData, SizeOf(TFDSet) * 2);
|
||||||
FD_Zero(PFDSet(Handle^.Data.FDData)[0]);
|
{$ifdef VER1_0}FD_ZERO{$else}fpFD_ZERO{$endif}(PFDSet(Handle^.Data.FDData)[0]);
|
||||||
FD_Zero(PFDSet(Handle^.Data.FDData)[1]);
|
{$ifdef VER1_0}FD_ZERO{$else}fpFD_ZERO{$endif}(PFDSet(Handle^.Data.FDData)[1]);
|
||||||
end;
|
end;
|
||||||
if Data^.IOHandle > Handle^.Data.HighestHandle then
|
if Data^.IOHandle > Handle^.Data.HighestHandle then
|
||||||
Handle^.Data.HighestHandle := Data^.IOHandle;
|
Handle^.Data.HighestHandle := Data^.IOHandle;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Data^.SavedHandleFlags := fcntl(Data^.IOHandle, F_GetFl);
|
Data^.SavedHandleFlags := {$ifdef VER1_0}fcntl{$else}fpfcntl{$endif}(Data^.IOHandle, F_GetFl);
|
||||||
fcntl(Data^.IOHandle, F_SetFl, Data^.SavedHandleFlags or Open_NonBlock);
|
{$ifdef VER1_0}fcntl{$else}fpfcntl{$endif}(Data^.IOHandle, F_SetFl, Data^.SavedHandleFlags or Open_NonBlock);
|
||||||
|
|
||||||
case Data^.IOHandle of
|
case Data^.IOHandle of
|
||||||
StdInputHandle:
|
StdInputHandle:
|
||||||
@ -166,16 +166,16 @@ begin
|
|||||||
case i of
|
case i of
|
||||||
Open_RdOnly:
|
Open_RdOnly:
|
||||||
if cbRead in CallbackTypes then
|
if cbRead in CallbackTypes then
|
||||||
FD_Set(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[0]);
|
{$ifdef VER1_0}FD_Set{$else}fpFD_SET{$endif}(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[0]);
|
||||||
Open_WrOnly:
|
Open_WrOnly:
|
||||||
if cbWrite in CallbackTypes then
|
if cbWrite in CallbackTypes then
|
||||||
FD_Set(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[1]);
|
{$ifdef VER1_0}FD_Set{$else}fpFD_SET{$endif}(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[1]);
|
||||||
Open_RdWr:
|
Open_RdWr:
|
||||||
begin
|
begin
|
||||||
if cbRead in CallbackTypes then
|
if cbRead in CallbackTypes then
|
||||||
FD_Set(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[0]);
|
{$ifdef VER1_0}FD_Set{$else}fpFD_SET{$endif}(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[0]);
|
||||||
if cbWrite in CallbackTypes then
|
if cbWrite in CallbackTypes then
|
||||||
FD_Set(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[1]);
|
{$ifdef VER1_0}FD_Set{$else}fpFD_SET{$endif}(Data^.IOHandle, PFDSet(Handle^.Data.FDData)[1]);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -184,17 +184,21 @@ procedure InternalClearIOCallback(Handle: TAsyncHandle; IOHandle: LongInt;
|
|||||||
CallbackTypes: TCallbackTypes);
|
CallbackTypes: TCallbackTypes);
|
||||||
begin
|
begin
|
||||||
if cbRead in CallbackTypes then
|
if cbRead in CallbackTypes then
|
||||||
FD_Clr(IOHandle, PFDSet(Handle^.Data.FDData)[0]);
|
{$ifdef VER1_0}FD_CLR{$else}fpFD_CLR{$endif}(IOHandle, PFDSet(Handle^.Data.FDData)[0]);
|
||||||
if cbWrite in CallbackTypes then
|
if cbWrite in CallbackTypes then
|
||||||
FD_Clr(IOHandle, PFDSet(Handle^.Data.FDData)[1]);
|
{$ifdef VER1_0}FD_CLR{$else}fpFD_CLR{$endif}(IOHandle, PFDSet(Handle^.Data.FDData)[1]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function asyncGetTicks: Int64; cdecl;
|
function asyncGetTicks: Int64; cdecl;
|
||||||
var
|
var
|
||||||
Time: TimeVal;
|
Time: TimeVal;
|
||||||
begin
|
begin
|
||||||
GetTimeOfDay(Time);
|
fpGetTimeOfDay({$ifndef ver1_0}@time,nil{$else}time{$endif});
|
||||||
Result := Int64(Time.Sec) * 1000 + Int64(Time.USec div 1000);
|
{$ifdef ver1_0}
|
||||||
|
Result := Int64(Time.Sec) * 1000 + Int64(Time.USec div 1000);
|
||||||
|
{$else}
|
||||||
|
Result := Int64(Time.tv_Sec) * 1000 + Int64(Time.tv_USec div 1000);
|
||||||
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -203,7 +207,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2002-09-25 21:53:39 sg
|
Revision 1.6 2003-09-19 17:46:23 marco
|
||||||
|
* Unix reform stage III aftermath
|
||||||
|
|
||||||
|
Revision 1.5 2002/09/25 21:53:39 sg
|
||||||
* Split in common implementation an platform dependent implementation
|
* Split in common implementation an platform dependent implementation
|
||||||
|
|
||||||
Revision 1.4 2002/09/15 15:51:09 sg
|
Revision 1.4 2002/09/15 15:51:09 sg
|
||||||
|
Loading…
Reference in New Issue
Block a user