[Lazarus] Problem with TProcessUTF8 and filenames with spaces

Michael Van Canneyt michael at freepascal.org
Sat Dec 8 12:30:03 CET 2012



On Sat, 8 Dec 2012, zeljko wrote:

> Hi,
>
> TCustomApplication, fpc-2.6.0
>
> ./mycmdtool --inputfile=myfile withspace.txt
> GetOptionValue('i','inputfile') returns only "myfile"

That is normal.

> same thing happens if I try:
> ./mycmdtool "--inputfile=myfile withspace.txt"
> ./mycmdtool --inputfile="myfile withspace.txt"
> ./mycmdtool --inputfile='myfile withspace.txt'

This is not normal.

>
> How to fix this (have param value with space) ? Any workarounds if it's bug in
> TCustomApplication or whatever ?

I created the following TCustomApplication program:

procedure TMyApplication.DoRun;
var
   ErrorMsg: String;
begin
   writeln(getoptionvalue('f','file'));
   Terminate;
end;

When run it prints the correct output:

araminta: >./tc --file='my file is here.txt'
my file is here.txt
araminta: >./tc '--file=my file is here.txt'
my file is here.txt
araminta: >./tc "--file=my file is here.txt"
my file is here.txt

So I doubt the problem is there. What gets printed if you do a

For I:=0 to ParamCount do
   Writeln(Paramstr(i));

Just to rule out TCustomApplication.

You mention TProcessUTF8, that is a complicating factor. 
You then need to see (using strace) what the calling app actually sends.
I suspect the problem is there.

Are you using the new 'parameters' or still the old 'CommandLine' ?
If the latter, then it is a safe bet that the problem is there.

Michael.




More information about the Lazarus mailing list