Skip to content

Commit 95e553f

Browse files
committed
feat: detect symlinks from Rock Ridge extensions
1 parent d8bdf16 commit 95e553f

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

image_reader.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ func (f *File) Mode() os.FileMode {
8383
if f.IsDir() {
8484
mode |= os.ModeDir
8585
}
86+
if f.de.FileFlags & 32 != 0 {
87+
mode |= os.ModeSymlink
88+
}
8689
return mode
8790
}
8891

@@ -162,14 +165,21 @@ func (f *File) GetChildren() ([]*File, error) {
162165
continue
163166
}
164167

165-
// use alternative name from Rock Ridge extension, if provided
168+
// use Rock Ridge extension to get full name and symbolic link flag
166169
wrkBuf := newDE.SystemUse
167170
for tag, buf := getTag(wrkBuf); tag != ""; tag, buf = getTag(wrkBuf) {
168-
if tag == "NM" {
171+
if tag == "PX" {
172+
fileMode, err := UnmarshalInt32LSBMSB(buf[1:9])
173+
if err != nil {
174+
return nil, err
175+
}
176+
if fileMode & 0120000 == 0120000 {
177+
newDE.FileFlags |= 32 // this bit a reserved, set to indicate a symlink
178+
}
179+
} else if tag == "NM" {
169180
if buf[1] == 0x00 { // any set flag value means that alternative name shouldn't be used
170181
newDE.Identifier = string(buf[2:])
171182
}
172-
break
173183
}
174184
wrkBuf = wrkBuf[len(buf)+3:]
175185
}

0 commit comments

Comments
 (0)