From 326a427da123287b271e56dce07364d03991e714 Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 25 Feb 2004 17:06:39 +0000 Subject: [PATCH] + dummy added to keep darwin dir alive --- fcl/darwin/process.inc | 117 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 fcl/darwin/process.inc diff --git a/fcl/darwin/process.inc b/fcl/darwin/process.inc new file mode 100644 index 0000000000..857442750f --- /dev/null +++ b/fcl/darwin/process.inc @@ -0,0 +1,117 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 1999-2000 by Michael Van Canneyt + + Darwin specific part of TProcess. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +uses +{$ifdef ver1_0} + Linux +{$else} + Unix +{$endif} + ; + +Function TProcess.GetRunning : Boolean; + +begin + IF FRunning then + FRunning:=GetExitStatus=-1; + Result:=FRunning; +end; + +Procedure TProcess.Execute; + +begin + FreeStreams; + CreatePipeStreams (FChildInputSTream,FParentOutPutStream); + CreatePipeStreams (FParentInputStream,FChildOutPutStream); + If poUsePipes in FCreateOptions then + begin + if poStdErrToOutPut in FCreateOptions then + CreatePipeStreams (FParentErrorStream,FChildErrorStream) + else + begin + FChildErrorStream:=FChildOutPutStream; + FParentErrorStream:=FParentInputStream; + end; + end + else + CreatePipeStreams (FParentErrorStream,FChildErrorStream); + If FCurrentDirectory<>'' then + Chdir(FCurrentDirectory); + FHandle:=fork(); + if FHandle=0 then + begin + // Child + fdClose(0); + fdClose(1); + fdclose(2); + dup2(FChildInputStream.Handle,0); + dup2(FCHildOutputStream.Handle,1); + dup2(FChildErrorStream.Handle,2); + execl(FCommandline); + halt(127); + end + else + begin + // Parent + FPID:=FHandle; + FThreadHandle:=FHandle; + fdclose(FChildOutputStream.Handle); + fdclose(FChildInputStream.Handle); + fdclose(FChildErrorStream.Handle); + FRunning:=True; + if (poWaitOnExit in FCreateOptions) and + not (poRunSuspended in FCreateOptions) then + WaitOnExit; + end; +end; + +Function TProcess.WaitOnExit : Dword; + +begin + waitpid(FPID, nil, 0); +{ + Result:=WaitForSingleObject (FprocessInformation.hProcess,Infinite); + If Result<>Wait_Failed then + GetExitStatus; +} FRunning:=False; + Result := 0; +end; + +Function TProcess.Suspend : Longint; + +begin + Result:=Kill(Handle,SIGSTOP); +end; + +Function TProcess.Resume : LongInt; + +begin + Result:=Kill(FHandle,SIGCONT); +end; + +Function TProcess.Terminate(AExitCode : Integer) : Boolean; + +begin + Result:=False; + If ExitStatus=-1 then + Result:=Kill(FHandle,SIGTERM)=0; +end; + +{ + $Log$ + Revision 1.1 2004-02-25 17:06:39 florian + + dummy added to keep darwin dir alive +}