Am Donnerstag, den 21.06.2007, 20:49 +0200 schrieb Marco van de Voort:
> On Thu, Jun 21, 2007 at 09:48:56PM +0400, Alex Smirnov wrote:
> > Peter Vreman ?????:
> > >If need performance and only need to have the filename you can use 
> > >fpgetdents or the deprecated
> > >fpreaddir. If you need all file information like size and modified 
> > >timestamp then better use the
> > >portable findfirst/findnext.
> > >  
> > *Thank you, Peter!
> > 
> > * Can you. please, help me to understand Dir structure, i.e
> 
> The FreeBSD source has some comments
> 
>   dir     = packed record
>         dd_fd     : cint;         // file descriptor associated with directory
>         dd_loc    : clong;        // offset in current buffer
>         dd_size   : clong;        // amount of data returned by
>         getdirentries
>         dd_buf    : pchar;        // data buffer
>         dd_len    : cint;         // size of data buffer
> {$ifdef netbsdpowerpc}
>         dd_pad1   : cint;
>         dd_seek   : cint64;        // magic cookie returned by getdirentries
> {$else}
>         dd_seek   : clong;        // magic cookie returned by getdirentries
> {$endif}
>         dd_rewind : clong;        // magic cookie for rewinding
>         dd_flags  : cint;         // flags for readdir
>    end;
>    TDir    = dir;
>    pDir    = ^dir;
> 
> However I would vote against using it. Sure it saves a stat here and there,
> but it is way less portable (even amongst *nixes in time) than findfirst.

While we're at it: what does the following comment want to say? I've
been fiddling with that stuff, but that was quite a while ago and I've
forgotten the details.

from <fpc-2.0.4>/src/rtl/unix/sysutils.pp:

Function FindFirst (Const Path : String; Attr : Longint; out Rslt : TSearchRec) 
: Longint;

Var
  GlobSearchRec : PGlobSearchRec;

begin
  New(GlobSearchRec);
  GlobSearchRec^.Path:=ExpandFileName(ExtractFilePath(Path));
  GlobSearchRec^.GlobHandle:=Glob(Path);
  Rslt.ExcludeAttr:=Not Attr and (faHidden or faSysFile or faVolumeID or 
faDirectory); //!! Not correct !!
  Rslt.FindHandle:=GlobSearchRec;
  Result:=DoFind (Rslt);
end;

If it's wrong, why is it in the code?
And, more important, what would be correct?

TIA,
Marc


_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to