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 {
}
return ErrLine(err)
}
- inode, err := inodeFromFileByFd(fd)
+ inode, _, err := inodeFromFileByFd(fd)
if err != nil {
fd.Close()
return ErrLine(err)
}
}
-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) {