On Sat, 2 May 2015, Alfred wrote:

Hello to all.

While working on fpcup, I did encounter the following problem.

Fpcup has modules that implement automatic download and install of packages.
One of these modules is indy.

Indy has a svn server that needs a username. No password is needed.
However, if a username is given to a command line svn client, this svn-client wants to have a password too.
This password has to be empty.

Fpcup uses TProcess to execute commands.
But it seems that TProcess cannot handle empty parameters correctly (on Linux).

That is debatable:

The question is: how does a C program interpret a Nil argv[] pointer ?
Because a Nil pointer is added to the Argv[] array, so the argument is there.

It processes the parameters, including the empty password, by generating a list of (p)pchar strings.
It uses strnew to accomplish this.
But strnew returns nil for an empty string (Delphi does not return nil in this case).

Do you have a test for this ?


My question:

Is this expected behavior of TProcess ?
Or should TProcess be changed.
Or strnew (and strpas) ?

Thanks.

Additional info
Sourcefile : process.inc, inside fpc\packages\fcl-process\src\unix :
Function StringsToPCharList(List : TStrings) : PPChar;
Var
 I : Integer;
 S : String;
begin
 I:=(List.Count)+1;
 GetMem(Result,I*sizeOf(PChar));
 PPCharArray(Result)^[List.Count]:=Nil;
 For I:=0 to List.Count-1 do
 begin
   S:=List[i];
   Result[i]:=StrNew(PChar(S)); <--------------------------- here

Pchar(S) will return a pointer to an empty string (essentially, a pointer to a 
#0 char)
if S is empty. That means that StrNew would need to be adapted.

However, for backwards compatibility with FPC, it may be better to simply change TProcess to add a pointer to a zero character #0

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to