Hello all,
I'm new to this list and I coudn't find out how to send in patches so i do it here...
On my system FPC doesn't work because the fpreaddir-function failes on larger directories. I saw that fpreaddir still uses the linux readdir-call, wich is superseded by getdents. (also the comments are wrong. The result of the readdir-call isn't the amount of bytes read. That's only the case by the getdents-call)
I've rewritten Fpreaddir (in rtl/linux/ossysc.inc) as follows:
-----
Function Fpreaddir(dirp : pdir) : pdirent; [public, alias
: 'FPC_SYSC_READDIR'];{readdir is obsolete. Use getdents instead...}
var bytes : integer;
dp : pdirent;
begin
repeat
if dirp^.dd_nextoff >= dirp^.dd_size then
begin
bytes :=
do_SysCall(SysCall_nr_getdents,TSysParam(dirp^.dd_fd),TSysParam(dirp^.dd_buf),TSysParam(dirp^.dd_max));
if bytes <= 0 then
begin
fpreaddir := nil;
exit;
end;
dirp^.dd_size := bytes;
dirp^.dd_nextoff := 0;
end;
dp := pdirent(ptrint(dirp^.dd_buf)+dirp^.dd_nextoff);
dirp^.dd_nextoff := dirp^.dd_nextoff + dp^.d_reclen;
dirp^.dd_loc := dirp^.dd_loc + dp^.d_reclen;
until dp^.d_fileno 0; // Don't show deleted files
Fpreaddir := dp;
end;-----
and I had to change Fpopendir a little. Just added
---
ptr^.dd_nextoff:= 0;---
before the last line.
Oh, and btw: in install/install.sh the version-number is still 1.9.2, which causes the installation to fail. (symbolic links are wronly created)
Joost van der Sluis.
