Skip to content

Commit 80ac6f8

Browse files
authored
ext4: Report all file types in directoryEntryInfo.Type() and Info() (#350)
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 <pawel.gronowski@docker.com>
1 parent fb221b6 commit 80ac6f8

1 file changed

Lines changed: 19 additions & 16 deletions

File tree

filesystem/ext4/directoryentry.go

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -184,32 +184,35 @@ type directoryEntryInfo struct {
184184
}
185185

186186
func (de *directoryEntryInfo) Info() (iofs.FileInfo, error) {
187-
mode := iofs.FileMode(0)
188-
isDir := de.directoryEntry.fileType == dirFileTypeDirectory
189-
if isDir {
190-
mode |= iofs.ModeDir
191-
}
192-
if de.inode != nil && de.inode.fileType == fileTypeSymbolicLink {
193-
mode |= iofs.ModeSymlink
194-
}
187+
mode := de.Type()
195188
return &FileInfo{
196189
modTime: de.modifyTime,
197190
name: de.filename,
198191
size: int64(de.size),
199-
isDir: isDir,
192+
isDir: de.directoryEntry.fileType == dirFileTypeDirectory,
200193
mode: mode,
201194
}, nil
202195
}
203196

204197
func (de *directoryEntryInfo) Type() iofs.FileMode {
205-
mode := iofs.FileMode(0)
206-
if de.directoryEntry.fileType == dirFileTypeDirectory {
207-
mode |= iofs.ModeDir
208-
}
209-
if de.inode != nil && de.inode.fileType == fileTypeSymbolicLink {
210-
mode |= iofs.ModeSymlink
198+
switch de.directoryEntry.fileType {
199+
case dirFileTypeDirectory:
200+
return iofs.ModeDir
201+
case dirFileTypeSymlink:
202+
return iofs.ModeSymlink
203+
case dirFileTypeCharacter:
204+
return iofs.ModeDevice | iofs.ModeCharDevice
205+
case dirFileTypeBlock:
206+
return iofs.ModeDevice
207+
case dirFileTypeFifo:
208+
return iofs.ModeNamedPipe
209+
case dirFileTypeSocket:
210+
return iofs.ModeSocket
211+
case dirFileTypeUnknown, dirFileTypeRegular:
212+
return 0
213+
default:
214+
return 0
211215
}
212-
return mode
213216
}
214217

215218
func (de *directoryEntryInfo) IsDir() bool {

0 commit comments

Comments
 (0)