summaryrefslogtreecommitdiff
path: root/internal/file
diff options
context:
space:
mode:
Diffstat (limited to 'internal/file')
-rw-r--r--internal/file/file.go31
1 files changed, 25 insertions, 6 deletions
diff --git a/internal/file/file.go b/internal/file/file.go
index da498ce..7d9d7e8 100644
--- a/internal/file/file.go
+++ b/internal/file/file.go
@@ -16,22 +16,38 @@ type File interface {
}
type FdFile struct {
- fd int32
- name string
- Flags int32
+ fd int32
+ name string
+ Flags int32
+ flagsFromFdInfo bool
}
func NewFd(fd int32, name []byte, flags int32) FdFile {
- return FdFile{fd, stringValue(name), flags}
+ return FdFile{
+ fd: fd,
+ name: stringValue(name),
+ Flags: flags,
+ }
}
func NewFdWithPid(fd int32, pid uint32) FdFile {
linkName, err := os.Readlink(fmt.Sprintf("/proc/%d/fd/%d", pid, fd))
if err != nil {
- return FdFile{fd, "?", -1}
+ return FdFile{
+ fd: fd,
+ name: "?",
+ Flags: -1,
+ flagsFromFdInfo: true,
+ }
}
+
flags, _ := readFlagsFromFdInfo(fd, pid)
- return FdFile{fd, linkName, flags}
+ return FdFile{
+ fd: fd,
+ name: linkName,
+ Flags: flags,
+ flagsFromFdInfo: true,
+ }
}
func readFlagsFromFdInfo(fd int32, pid uint32) (int32, error) {
@@ -71,6 +87,9 @@ func (f FdFile) String() string {
sb.WriteString(",")
sb.WriteString(f.FlagsString())
sb.WriteString(")")
+ if f.flagsFromFdInfo {
+ sb.WriteString(" flags from fd info")
+ }
}
return sb.String()