[fpc-pascal] ExpandFileName failure on long filenames on Linux

Bart bartjunk64 at gmail.com
Sat Aug 31 15:59:29 CEST 2013


On 8/31/13, Michael Van Canneyt <michael at freepascal.org> wrote:

> Did you enable ansistrings and object pascal mode ?
> Because as it is displayed above, the program will use shortstrings, and
> they are limited to 255 chars.

Yes (I typed the example from the top if my head):
(ObjFpc mode should not matter though as long as {$H+} is specified?)

Here's my very long directory:

[bart at localhost 012345679]$ pwd
/home/bart/X/01DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD/012345679

Here's the program source:

[bart at localhost 012345679]$ cat ~/LazarusProjecten/bugs/findfirst/efn.lpr
program efn;

{$mode objfpc}
{$H+}

uses sysutils;


var
  S: String;
  Len: Integer;
begin
  S := SysUtils.ExpandFileName(ParamStr(1));
  Len := Length(S);
  writeln(Format('%s [Length = %d]',[S,Len]));
end.

And this is what it outputs.

[bart at localhost 012345679]$ ~/LazarusProjecten/bugs/findfirst/efn .
/home/bart/X/01DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
[Length = 255]
[bart at localhost 012345679]$


At some point a call is made to
Procedure getdir(drivenr:byte;var dir:ansistring);
(rtl/inc/sysem.inc)

This then calls the ShortString version of GetDir() and puts the
resulting ShortString back into the AnsiString.

Procedure getdir(drivenr:byte;Var dir:ansistring);
{ this is needed to also allow ansistrings, the shortstring version is
  OS dependent }
var
  s : shortstring;
begin
  getdir(drivenr,s);
  dir:=s;
end;

Bart



More information about the fpc-pascal mailing list