commit 9c86b64cc6c1b32703be23a8a72e739bff2d43f1
parent 115df38dbdad38b067b3f5c83b33e4c04feb685d
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 31 Aug 2023 07:48:13 +0900
divide file
Diffstat:
| M | file.go | | | 29 | ----------------------------- |
| A | uid.go | | | 32 | ++++++++++++++++++++++++++++++++ |
2 files changed, 32 insertions(+), 29 deletions(-)
diff --git a/file.go b/file.go
@@ -21,35 +21,6 @@ const (
AREAD
)
-func hasPerm(f File, uid string, p fs.FileMode) (bool, error) {
- fi, err := f.Stat()
- if err != nil {
- return false, fmt.Errorf("Stat: %v", err)
- }
- fp := fi.Mode().Perm()
- Stat, ok := fi.Sys().(*Stat)
- if !ok {
- panic("not Stat")
- }
- m := fp & 7 // other
- if (p & m) == p {
- return true, nil
- }
- if Stat.Uid == uid {
- m |= (fp >> 6) & 7
- if (p & m) == p {
- return true, nil
- }
- }
- if Stat.Gid == uid {
- m |= (fp >> 3) & 7
- if (p & m) == p {
- return true, nil
- }
- }
- return false, nil
-}
-
type Stat struct {
Type uint16
Dev uint32
diff --git a/uid.go b/uid.go
@@ -0,0 +1,32 @@
+package lib9p
+
+import (
+ "fmt"
+ "io/fs"
+)
+
+func hasPerm(f File, uid string, p fs.FileMode) (bool, error) {
+ fi, err := f.Stat()
+ if err != nil {
+ return false, fmt.Errorf("Stat: %v", err)
+ }
+ fp := fi.Mode().Perm()
+ Stat := fi.Sys().(*Stat)
+ m := fp & 7 // other
+ if (p & m) == p {
+ return true, nil
+ }
+ if Stat.Uid == uid {
+ m |= (fp >> 6) & 7
+ if (p & m) == p {
+ return true, nil
+ }
+ }
+ if Stat.Gid == uid {
+ m |= (fp >> 3) & 7
+ if (p & m) == p {
+ return true, nil
+ }
+ }
+ return false, nil
+}