uses SysUtils;
function ParameterLength(Parameter: AnsiString): SizeUInt;inline;
begin
Result:= Length(Parameter);
if Result = 0 then
Result:= 2
else begin
if Pos(' ', Parameter) <> 0 then
inc(Result, 2);
{$If Defined(Windows)}
inc(Result, Parameter.CountChar('"'));
{$ElseIf Defined(UNIX)}
inc(Result, Parameter.CountChar('''') * 3);
{$EndIf}
end;
end;
function ParameterLength(Parameter: UnicodeString): SizeUInt;inline;
begin
Result:= Length(Parameter);
if Result = 0 then
Result:= 2
else begin
if Pos(' ', Parameter) <> 0 then
inc(Result, 2);
{$If Defined(Windows)}
inc(Result, Parameter.CountChar('"'));
{$ElseIf Defined(UNIX)}
inc(Result, Parameter.CountChar('''') * 3);
{$EndIf}
end;
end;
function EscapeParameter(Parameter: AnsiString; var OutBuf: AnsiChar): SizeUInt;
var
Arr: array[Byte]of AnsiChar absolute OutBuf;
i: SizeUInt;
HaveSpace: Boolean;
begin
{$If Defined(Windows)}
Result:= 0;
if Parameter = '' then begin
Arr[0]:= '"';
Arr[1]:= '"';
Exit(2);
end;
HaveSpace:= Pos(' ', Parameter) <> 0;
Result:= 0;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
for i:= 1 to Length(Parameter) do begin
if Parameter[i] = '"' then begin
Arr[Result]:= '"';
Arr[Result + 1]:= '"';
inc(Result, 2);
end else begin
Arr[Result]:= Parameter[i];
inc(Result);
end;
end;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
{$ElseIf Defined(UNIX)}
if Parameter = '' then begin
Arr[0]:= '''';
Arr[1]:= '''';
Exit(2);
end;
HaveSpace:= Pos(' ', Parameter) <> 0;
Result:= 0;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
for i:= 1 to Length(Parameter) do begin
if Parameter[i] = '''' then begin
Arr[Result]:= '''';
Arr[Result + 1]:= '\';
Arr[Result + 2]:= '''';
Arr[Result + 3]:= '''';
inc(Result, 4);
end else begin
Arr[Result]:= Parameter[i];
inc(Result);
end;
end;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
{$Else}
{$EndIf}
end;
function EscapeParameter(Parameter: UnicodeString; var OutBuf: UnicodeChar): SizeUInt;
var
Arr: array[Byte]of UnicodeChar absolute OutBuf;
i: SizeUInt;
HaveSpace: Boolean;
begin
{$If Defined(Windows)}
Result:= 0;
if Parameter = '' then begin
Arr[0]:= '"';
Arr[1]:= '"';
Exit(2);
end;
HaveSpace:= Pos(' ', Parameter) <> 0;
Result:= 0;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
for i:= 1 to Length(Parameter) do begin
if Parameter[i] = '"' then begin
Arr[Result]:= '"';
Arr[Result + 1]:= '"';
inc(Result, 2);
end else begin
Arr[Result]:= Parameter[i];
inc(Result);
end;
end;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
{$ElseIf Defined(UNIX)}
if Parameter = '' then begin
Arr[0]:= '''';
Arr[1]:= '''';
Exit(2);
end;
HaveSpace:= Pos(' ', Parameter) <> 0;
Result:= 0;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
for i:= 1 to Length(Parameter) do begin
if Parameter[i] = '''' then begin
Arr[Result]:= '''';
Arr[Result + 1]:= '\';
Arr[Result + 2]:= '''';
Arr[Result + 3]:= '''';
inc(Result, 4);
end else begin
Arr[Result]:= Parameter[i];
inc(Result);
end;
end;
if HaveSpace then begin
Arr[Result]:= '"';
inc(Result);
end;
{$Else}
{$EndIf}
end;