]> Cypherpunks.ru repositories - goredo.git/commitdiff
Remove excess stat call
authorSergey Matveev <stargrave@stargrave.org>
Fri, 29 Sep 2023 19:51:01 +0000 (22:51 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 30 Sep 2023 09:40:23 +0000 (12:40 +0300)
dep.go
depfix.go
inode.go

diff --git a/dep.go b/dep.go
index 9792cb0bbcd5b40a6289cdcdccc109ffd6fd7b92..18f5db6bcfb5c47ddb68977b98878477ba5f633f 100644 (file)
--- a/dep.go
+++ b/dep.go
@@ -92,17 +92,13 @@ func depWrite(fdDep *os.File, cwd, tgt, hsh string) error {
                return ErrLine(err)
        }
        defer fd.Close()
-       fi, err := fd.Stat()
+       inode, isDir, err := inodeFromFileByFd(fd)
        if err != nil {
-               return err
+               return ErrLine(err)
        }
-       if fi.IsDir() {
+       if isDir {
                return nil
        }
-       inode, err := inodeFromFileByFd(fd)
-       if err != nil {
-               return err
-       }
        if hsh == "" {
                hsh, err = fileHash(fd)
                if err != nil {
index 376c9229ea5b98c1b538f013a6191dacac93027e..1f29122764bd75ca9a9a875f68951ca0b1fa398e 100644 (file)
--- a/depfix.go
+++ b/depfix.go
@@ -121,7 +121,7 @@ func depFix(root string) error {
                                        }
                                        return ErrLine(err)
                                }
-                               inode, err := inodeFromFileByFd(fd)
+                               inode, _, err := inodeFromFileByFd(fd)
                                if err != nil {
                                        fd.Close()
                                        return ErrLine(err)
index 50db586cb4cc6d1eaec726eafa231f56d7daaf34..2f2285d407de55eb3b1bfd3cdea1f8b53bbb44d4 100644 (file)
--- a/inode.go
+++ b/inode.go
@@ -96,17 +96,22 @@ func inodeFromFileStat(fi os.FileInfo, stat unix.Stat_t) *Inode {
        }
 }
 
-func inodeFromFileByFd(fd *os.File) (*Inode, error) {
+func inodeFromFileByFd(fd *os.File) (inode *Inode, isDir bool, err error) {
        fi, err := fd.Stat()
        if err != nil {
-               return nil, err
+               return
+       }
+       if fi.IsDir() {
+               isDir = true
+               return
        }
        var stat unix.Stat_t
        err = unix.Fstat(int(fd.Fd()), &stat)
        if err != nil {
-               return nil, err
+               return
        }
-       return inodeFromFileStat(fi, stat), nil
+       inode = inodeFromFileStat(fi, stat)
+       return
 }
 
 func inodeFromFileByPath(p string) (*Inode, error) {