Source file
src/os/dirent_openbsd.go
1
2
3
4
5 package os
6
7 import (
8 "syscall"
9 "unsafe"
10 )
11
12 func direntIno(buf []byte) (uint64, bool) {
13 return readInt(buf, unsafe.Offsetof(syscall.Dirent{}.Fileno), unsafe.Sizeof(syscall.Dirent{}.Fileno))
14 }
15
16 func direntReclen(buf []byte) (uint64, bool) {
17 return readInt(buf, unsafe.Offsetof(syscall.Dirent{}.Reclen), unsafe.Sizeof(syscall.Dirent{}.Reclen))
18 }
19
20 func direntNamlen(buf []byte) (uint64, bool) {
21 return readInt(buf, unsafe.Offsetof(syscall.Dirent{}.Namlen), unsafe.Sizeof(syscall.Dirent{}.Namlen))
22 }
23
24 func direntType(buf []byte) FileMode {
25 off := unsafe.Offsetof(syscall.Dirent{}.Type)
26 if off >= uintptr(len(buf)) {
27 return ^FileMode(0)
28 }
29 typ := buf[off]
30 switch typ {
31 case syscall.DT_BLK:
32 return ModeDevice
33 case syscall.DT_CHR:
34 return ModeDevice | ModeCharDevice
35 case syscall.DT_DIR:
36 return ModeDir
37 case syscall.DT_FIFO:
38 return ModeNamedPipe
39 case syscall.DT_LNK:
40 return ModeSymlink
41 case syscall.DT_REG:
42 return 0
43 case syscall.DT_SOCK:
44 return ModeSocket
45 }
46 return ^FileMode(0)
47 }
48
View as plain text