This is a common gotcha. Quoting page readdir(3):

> 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.