diff options
| author | Paul Buetow <paul@buetow.org> | 2025-04-06 23:03:54 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-04-06 23:03:54 +0300 |
| commit | 138c0f9b6255ed61eee8390674c026daa23eddc5 (patch) | |
| tree | e2d2494e8ce14fb0e504216cc6cb7a4eefed04ad /internal/file/file.go | |
| parent | 95e3477875c0e31e0c6907ab6afe4ce48fb37391 (diff) | |
refactor
Diffstat (limited to 'internal/file/file.go')
| -rw-r--r-- | internal/file/file.go | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/internal/file/file.go b/internal/file/file.go index 9754520..11d992d 100644 --- a/internal/file/file.go +++ b/internal/file/file.go @@ -12,24 +12,23 @@ import ( type File interface { String() string Name() string - FlagsString() string + Flags() Flags } type FdFile struct { fd int32 name string - Flags int32 + flags Flags flagsFromProcFS bool - unknownFlags bool } func NewFd(fd int32, name []byte, flags int32) FdFile { f := FdFile{ fd: fd, name: stringValue(name), - Flags: flags, + flags: Flags(flags), } - if f.Flags == -1 { + if f.flags == -1 { panic(fmt.Sprintf("DEBUG with -1 flags: %v", f)) } return f @@ -41,17 +40,11 @@ func NewFdWithPid(fd int32, pid uint32) (f FdFile) { procPath := fmt.Sprintf("/proc/%d/fd/%d", pid, fd) f.name, err = os.Readlink(procPath) if err != nil { - // fmt.Println("DEBUGXXX", procPath) f.name = "" } - f.Flags, err = readFlagsFromFdInfo(fd, pid) - if err != nil { - f.unknownFlags = true - f.Flags = 0 - } else { - f.flagsFromProcFS = true - } + f.flags, _ = readFlagsFromFdInfo(fd, pid) + f.flagsFromProcFS = true return f } @@ -62,10 +55,17 @@ func (f FdFile) Dup(fd int32) FdFile { return dupFd } -func readFlagsFromFdInfo(fd int32, pid uint32) (int32, error) { +func (f FdFile) DupAddFlags(fd, flags int32) FdFile { + dupFd := f + dupFd.fd = fd + dupFd.flags = Flags(int32(dupFd.flags) | flags) + return dupFd +} + +func readFlagsFromFdInfo(fd int32, pid uint32) (Flags, error) { data, err := os.ReadFile(fmt.Sprintf("/proc/%d/fdinfo/%d", pid, fd)) if err != nil { - return 0, err + return unknownFlag, err } scanner := bufio.NewScanner(bytes.NewReader(data)) for scanner.Scan() { @@ -73,10 +73,10 @@ func readFlagsFromFdInfo(fd int32, pid uint32) (int32, error) { if strings.HasPrefix(line, "flags:") { flagsStr := strings.Fields(line)[1] flags, err := strconv.ParseUint(flagsStr, 8, 32) - return int32(flags), err + return Flags(flags), err } } - return 0, scanner.Err() + return unknownFlag, scanner.Err() } func (f FdFile) Name() string { @@ -94,27 +94,18 @@ func (f FdFile) String() string { sb.WriteString("%(") sb.WriteString(strconv.FormatInt(int64(f.fd), 10)) sb.WriteString(",") - sb.WriteString(f.FlagsString()) + sb.WriteString(f.Flags().String()) sb.WriteString(")") return sb.String() } -func (f FdFile) FlagsString() string { - var sb strings.Builder - - if f.unknownFlags { - sb.WriteString("U") // Unknown - } - if f.flagsFromProcFS { - sb.WriteString("P") // ProcFS - } - if f.unknownFlags || f.flagsFromProcFS { - sb.WriteString(":flags") // ProcFS - } +func (f FdFile) Flags() Flags { + return f.flags +} - flagsToStr(&sb, f.Flags) - return sb.String() +func (f *FdFile) AddFlags(flags int32) { + f.flags = Flags(int32(f.flags) | flags) } type oldnameNewnameFile struct { @@ -129,8 +120,8 @@ func (f oldnameNewnameFile) Name() string { return f.Newname } -func (f oldnameNewnameFile) FlagsString() string { - return "" +func (f oldnameNewnameFile) Flags() Flags { + return unknownFlag } func (f oldnameNewnameFile) String() string { @@ -141,7 +132,7 @@ func (f oldnameNewnameFile) String() string { sb.WriteString(" ->new:") sb.WriteString(f.Newname) sb.WriteString("%(") - sb.WriteString(f.FlagsString()) + sb.WriteString(f.Flags().String()) sb.WriteString(")") return sb.String() @@ -159,8 +150,8 @@ func (f pathnameFile) Name() string { return f.Pathname } -func (f pathnameFile) FlagsString() string { - return "" +func (f pathnameFile) Flags() Flags { + return unknownFlag } func (f pathnameFile) String() string { @@ -169,7 +160,7 @@ func (f pathnameFile) String() string { sb.WriteString("pathname:") sb.WriteString(f.Pathname) sb.WriteString("%(") - sb.WriteString(f.FlagsString()) + sb.WriteString(f.Flags().String()) sb.WriteString(")") return sb.String() |
