mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 14:19:28 +02:00
* stream functions converted to work without linuxerror
This commit is contained in:
parent
4bd0a028bb
commit
4b8e3387a7
@ -199,8 +199,8 @@ Function PClose(Var F:file) : cint;
|
||||
Function POpen(var F:text;const Prog:String;rw:char):cint;
|
||||
Function POpen(var F:file;const Prog:String;rw:char):cint;
|
||||
|
||||
function AssignStream(Var StreamIn,Streamout:text;Const Prog:String) : longint;
|
||||
function AssignStream(var StreamIn, StreamOut, StreamErr: Text; const prog: String): LongInt;
|
||||
function AssignStream(Var StreamIn,Streamout:text;Const Prog:String) : cint;
|
||||
function AssignStream(var StreamIn, StreamOut, StreamErr: Text; const prog: String): cint;
|
||||
|
||||
{$ifndef BSD}
|
||||
Function GetDomainName:String;
|
||||
@ -855,7 +855,6 @@ Function AssignPipe(var pipe_in,pipe_out:text):cint;
|
||||
{
|
||||
Sets up a pair of file variables, which act as a pipe. The first one can
|
||||
be read from, the second one can be written to.
|
||||
If the operation was unsuccesful, linuxerror is set.
|
||||
}
|
||||
var
|
||||
f_in,f_out : longint;
|
||||
@ -1020,7 +1019,6 @@ begin
|
||||
exit(-1);
|
||||
end;
|
||||
ret:=AssignPipe(pipi,pipo);
|
||||
|
||||
if ret=-1 then
|
||||
exit(-1);
|
||||
pid:=fpfork;
|
||||
@ -1082,7 +1080,7 @@ begin
|
||||
POpen:=0;
|
||||
end;
|
||||
|
||||
Function AssignStream(Var StreamIn,Streamout:text;Const Prog:String) : longint;
|
||||
Function AssignStream(Var StreamIn,Streamout:text;Const Prog:String) : cint;
|
||||
{
|
||||
Starts the program in 'Prog' and makes its input and output the
|
||||
other end of two pipes, which are the stdin and stdout of a program
|
||||
@ -1100,16 +1098,13 @@ var
|
||||
pid : longint;
|
||||
pl : ^Longint;
|
||||
begin
|
||||
LinuxError:=0;
|
||||
AssignStream:=-1;
|
||||
AssignPipe(streamin,pipo);
|
||||
if Linuxerror<>0 then
|
||||
exit;
|
||||
AssignPipe(pipi,streamout);
|
||||
if Linuxerror<>0 then
|
||||
exit;
|
||||
if AssignPipe(streamin,pipo)=-1 Then
|
||||
exit(-1);
|
||||
if AssignPipe(pipi,streamout)=-1 Then // shouldn't this close streamin and pipo?
|
||||
exit(-1);
|
||||
pid:=fpfork;
|
||||
if linuxerror<>0 then
|
||||
if pid=-1 then
|
||||
begin
|
||||
close(pipi);
|
||||
close(pipo);
|
||||
@ -1123,12 +1118,10 @@ begin
|
||||
{ Close what we don't need }
|
||||
close(streamout);
|
||||
close(streamin);
|
||||
fpdup2(pipi,input);
|
||||
if linuxerror<>0 then
|
||||
if fpdup2(pipi,input)=-1 Then
|
||||
halt(127);
|
||||
close(pipi);
|
||||
fpdup2(pipo,output);
|
||||
if linuxerror<>0 then
|
||||
If fpdup2(pipo,output)=-1 Then
|
||||
halt (127);
|
||||
close(pipo);
|
||||
Execl(Prog);
|
||||
@ -1169,40 +1162,39 @@ var
|
||||
pid: LongInt;
|
||||
pl: ^LongInt;
|
||||
begin
|
||||
LinuxError := 0;
|
||||
AssignStream := -1;
|
||||
|
||||
// Assign pipes
|
||||
AssignPipe(StreamIn, PipeOut);
|
||||
if LinuxError <> 0 then exit;
|
||||
if AssignPipe(StreamIn, PipeOut)=-1 Then
|
||||
Exit(-1);
|
||||
|
||||
AssignPipe(StreamErr, PipeErr);
|
||||
if LinuxError <> 0 then begin
|
||||
If AssignPipe(StreamErr, PipeErr)=-1 Then
|
||||
begin
|
||||
Close(StreamIn);
|
||||
Close(PipeOut);
|
||||
exit;
|
||||
exit(-1);
|
||||
end;
|
||||
|
||||
AssignPipe(PipeIn, StreamOut);
|
||||
if LinuxError <> 0 then begin
|
||||
if AssignPipe(PipeIn, StreamOut)=-1 Then
|
||||
begin
|
||||
Close(StreamIn);
|
||||
Close(PipeOut);
|
||||
Close(StreamErr);
|
||||
Close(PipeErr);
|
||||
exit;
|
||||
exit(-1);
|
||||
end;
|
||||
|
||||
// Fork
|
||||
|
||||
pid := fpFork;
|
||||
if LinuxError <> 0 then begin
|
||||
if pid=-1 then begin
|
||||
Close(StreamIn);
|
||||
Close(PipeOut);
|
||||
Close(StreamErr);
|
||||
Close(PipeErr);
|
||||
Close(PipeIn);
|
||||
Close(StreamOut);
|
||||
exit;
|
||||
exit(-1);
|
||||
end;
|
||||
|
||||
if pid = 0 then begin
|
||||
@ -1212,14 +1204,14 @@ begin
|
||||
Close(StreamIn);
|
||||
Close(StreamErr);
|
||||
// Connect pipes
|
||||
fpdup2(PipeIn, Input);
|
||||
if LinuxError <> 0 then Halt(127);
|
||||
if fpdup2(PipeIn, Input)=-1 Then
|
||||
Halt(127);
|
||||
Close(PipeIn);
|
||||
fpdup2(PipeOut, Output);
|
||||
if LinuxError <> 0 then Halt(127);
|
||||
if fpdup2(PipeOut, Output)=-1 Then
|
||||
Halt(127);
|
||||
Close(PipeOut);
|
||||
fpdup2(PipeErr, StdErr);
|
||||
if LinuxError <> 0 then Halt(127);
|
||||
if fpdup2(PipeErr, StdErr)=-1 Then
|
||||
Halt(127);
|
||||
Close(PipeErr);
|
||||
// Execute program
|
||||
Execl(Prog);
|
||||
@ -1259,8 +1251,6 @@ Function GetDomainName:String; { linux only!}
|
||||
Var
|
||||
Sysn : utsname;
|
||||
begin
|
||||
// fpUname(Sysn);
|
||||
// linuxerror:=fpgeterrno;;
|
||||
If fpUname(sysn)<>0 then
|
||||
getdomainname:=''
|
||||
else
|
||||
@ -1275,9 +1265,7 @@ Function GetHostName:String;
|
||||
Var
|
||||
Sysn : utsname;
|
||||
begin
|
||||
fpuname(Sysn);
|
||||
linuxerror:=fpgeterrno;;
|
||||
If linuxerror<>0 then
|
||||
If fpuname(sysn)=-1 then
|
||||
gethostname:=''
|
||||
else
|
||||
gethostname:=strpas(@Sysn.nodename[0]);
|
||||
@ -1735,7 +1723,10 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.45 2003-11-13 18:44:06 marco
|
||||
Revision 1.46 2003-11-14 16:44:48 marco
|
||||
* stream functions converted to work without linuxerror
|
||||
|
||||
Revision 1.45 2003/11/13 18:44:06 marco
|
||||
* small fi
|
||||
|
||||
Revision 1.44 2003/11/12 22:19:45 marco
|
||||
|
Loading…
Reference in New Issue
Block a user