[fpc-devel] Re: FindFile / FindNext does work with > 253	character	length files
    Sergei Gorelkin 
    sergei_gorelkin at mail.ru
       
    Sat Mar 15 17:05:03 CET 2008
    
    
  
Sergei Gorelkin wrote:
> It turns out that for longer filenames fpreaddir() failes with errno=22 
> (invalid argument).
> 
Here is what I could find out:
In fpc, sizeof(dirent) is equal to 275, while gcc reports 
sizeof(dirent64)=276. Moreover, Linux kernel expects buffer for 
getdents64 syscall rounded up to 8 bytes (see fs/readdir.c in kernel 
source tree, macros ROUND_UP64 and NAME_OFFSET). Using these macros, we 
can calculate that for 255 char filename, a 280-byte buffer is expected 
(and value of 280 *is* returned in d_reclen field when filename length 
is 255). But that is still not working, for the reason I could not 
figure out. Only adding eight more bytes, i.e. using 288 bytes buffer, 
makes that syscall finally succeed with a 255 char filename.
A quick fix seems to just extend Dirent record with extra bytes, but 
perhaps there exists a more clean and consistent solution.
Best regards,
Sergei.
    
    
More information about the fpc-devel
mailing list