On Wed, Dec 17, 2008 at 12:57 AM, Steve McIntyre <st...@einval.com> wrote: > Luca wrote: >>2008/12/16 Luca Niccoli <lultimou...@gmail.com>: >> >>> I can't really see what I'm doing wrong... >> >>Maybe I have a clue: >> >>++file_filter(const struct dirent *dir) >>++{ >>++ return (DT_REG == (DT_REG & dir->d_type)) || >>++ (DT_LNK == (DT_LNK & dir->d_type)) ; >>++} >> >>But I use XFS, which seems to have some problems with d_type [1] >>I'm not really sure this is the source of the problem, but I thought >>it was worth giving a try...
Reading the man page of readdir you should alway test for DT_UNKNOWN, and fallback to stat if DT_UNKNOWN is set. And you should guard this test by #ifdef _DIRENT_HAVE_D_TYPE Moreover if you read getdents manpage, you will read that d_type is only filled since 2.6.4! In all the case I think we need to open a bug for getdents manpage it does not specify that d_type is DT_UNKNOW before 2.6.4 (backward compatibilty). I will fill a bug report. Perhaps filling a bug to manpage will be appropriate because wording is not clear. Please beware that they are issue with link and directory. Like for instance in http://mail.kde.org/pipermail/kdelibs-bugs/2008-March/001006.html d_type is an optimization not a thing that alway work. Bastien > I don't know about the exact state today, but at least in the past > many filesystems have not filled in d_type in readdir() calls. If you > want to see the type of a filesystem object safely and portably, > you'll need to call stat() or similar on each file. > > -- > Steve McIntyre, Cambridge, UK. st...@einval.com > Mature Sporty Personal > More Innovation More Adult > A Man in Dandism > Powered Midship Specialty > > > -- > To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org > with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org > > -- To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org