From f9067a9caf7b6184c22cb1c4595c206b136e8158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Gronowski?= Date: Tue, 24 Mar 2026 01:56:30 +0100 Subject: [PATCH] ext4: Report all file types in directoryEntryInfo.Type() and Info() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Type() only reported directories and symlinks, returning zero FileMode for all other types. This caused callers using WalkDir being mislead into treating special files like regular files. Signed-off-by: Paweł Gronowski --- filesystem/ext4/directoryentry.go | 35 +++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/filesystem/ext4/directoryentry.go b/filesystem/ext4/directoryentry.go index 2975398..60138b4 100644 --- a/filesystem/ext4/directoryentry.go +++ b/filesystem/ext4/directoryentry.go @@ -184,32 +184,35 @@ type directoryEntryInfo struct { } func (de *directoryEntryInfo) Info() (iofs.FileInfo, error) { - mode := iofs.FileMode(0) - isDir := de.directoryEntry.fileType == dirFileTypeDirectory - if isDir { - mode |= iofs.ModeDir - } - if de.inode != nil && de.inode.fileType == fileTypeSymbolicLink { - mode |= iofs.ModeSymlink - } + mode := de.Type() return &FileInfo{ modTime: de.modifyTime, name: de.filename, size: int64(de.size), - isDir: isDir, + isDir: de.directoryEntry.fileType == dirFileTypeDirectory, mode: mode, }, nil } func (de *directoryEntryInfo) Type() iofs.FileMode { - mode := iofs.FileMode(0) - if de.directoryEntry.fileType == dirFileTypeDirectory { - mode |= iofs.ModeDir - } - if de.inode != nil && de.inode.fileType == fileTypeSymbolicLink { - mode |= iofs.ModeSymlink + switch de.directoryEntry.fileType { + case dirFileTypeDirectory: + return iofs.ModeDir + case dirFileTypeSymlink: + return iofs.ModeSymlink + case dirFileTypeCharacter: + return iofs.ModeDevice | iofs.ModeCharDevice + case dirFileTypeBlock: + return iofs.ModeDevice + case dirFileTypeFifo: + return iofs.ModeNamedPipe + case dirFileTypeSocket: + return iofs.ModeSocket + case dirFileTypeUnknown, dirFileTypeRegular: + return 0 + default: + return 0 } - return mode } func (de *directoryEntryInfo) IsDir() bool {