/*
goredo -- redo implementation on pure Go
-Copyright (C) 2020 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
"os"
"path"
"strings"
- "syscall"
"go.cypherpunks.ru/recfile"
"golang.org/x/crypto/blake2b"
+ "golang.org/x/sys/unix"
)
func recfileWrite(fdDep *os.File, fields ...recfile.Field) error {
}
func fileCtime(fd *os.File) (string, error) {
- fi, err := fd.Stat()
- if err != nil {
+ var stat unix.Stat_t
+ if err := unix.Fstat(int(fd.Fd()), &stat); err != nil {
return "", err
}
- stat := fi.Sys().(*syscall.Stat_t)
- sec, nsec := stat.Ctimespec.Unix()
+ sec, nsec := stat.Ctim.Unix()
return fmt.Sprintf("%d.%d", sec, nsec), nil
}
return err
}
defer fd.Close()
+ fi, err := fd.Stat()
+ if err != nil {
+ return err
+ }
+ if fi.IsDir() {
+ return nil
+ }
ts, err := fileCtime(fd)
if err != nil {
return err