Ich habe mit diesen Funktionen einige Probleme. Es geht eigentlich darum, ob man das Vorhandensein von "_DIRENT_HAVE_D_TYPE" bei Linux inzwischen als allgemein vorhanden annehmen darf. Die Dokumentationen sind da etwas unscharf.
Die Doku zu readdir() sagt zwar zu d_type:
Currently, only some filesystems (among them: Btrfs, ext2, ext3, and ext4) have full support for returning the file type in d_type. All applications must properly handle a return of DT_UNKNOWN.
Ich erinnere mich aber, dass es damals auf einem uralt PC (Ubuntu 8.04) mit Reiserfs auch schon funktioniert hatte. Allerdings hatte ich später, auf einem Netzwerklaufwerk oder einer externen USB-Platte (weiß ich jetzt nicht mehr genau) Probleme damit. Es gab als Ergebniskode "DT_UNKNOWN". Diesen Zustand kann ich heute leider nicht mehr herstellen. Ich vermute, das liegt daran, dass heutzutage übergestülpte virtuelle Dateisysteme da (helfend?) eingreifen.
Wenn ich jetzt das Vorhandensein von "_DIRENT_HAVE_D_TYPE" immer noch testen muss, verkompliziert das den Programmkode erheblich, da ich ja in jedem Fall den DT_UNKNOWN Fall immer behandeln muss. Eines der Probleme dabei ist, dass die Rückfallfunktion stat() einen absoluten Dateipfad benötigt.
Ich mag keine Quelltexte, wo große unübersichtliche, Bereiche von "#ifdef's" abhängig sind. Kann ich das irgendwie vermeiden?