fn read_dir_bulk_portable(dir: &Path) -> Result<Vec<BulkEntry>>
Portable fallback: readdir + per-entry metadata. One syscall per entry.