From f967a33ccc34ce20fd42e0ef3ca4086337a11e09 Mon Sep 17 00:00:00 2001 From: greatroar <61184462+greatroar@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:06:26 +0200 Subject: [PATCH] fs: Use AT_FDCWD in Linux nodeRestoreSymlinkTimestamps There's no need to open the containing directory. This is exactly what syscall.UtimesNano does, except for the AT_SYMLINK_NOFOLLOW flag. --- internal/fs/node_linux.go | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/internal/fs/node_linux.go b/internal/fs/node_linux.go index 91ef4f907..55b4b05d7 100644 --- a/internal/fs/node_linux.go +++ b/internal/fs/node_linux.go @@ -1,33 +1,18 @@ package fs import ( - "os" - "path/filepath" "syscall" - "golang.org/x/sys/unix" - "github.com/restic/restic/internal/errors" + "golang.org/x/sys/unix" ) func nodeRestoreSymlinkTimestamps(path string, utimes [2]syscall.Timespec) error { - dir, err := os.Open(fixpath(filepath.Dir(path))) - if err != nil { - return errors.WithStack(err) - } - times := []unix.Timespec{ {Sec: utimes[0].Sec, Nsec: utimes[0].Nsec}, {Sec: utimes[1].Sec, Nsec: utimes[1].Nsec}, } - err = unix.UtimesNanoAt(int(dir.Fd()), filepath.Base(path), times, unix.AT_SYMLINK_NOFOLLOW) - - if err != nil { - // ignore subsequent errors - _ = dir.Close() - return errors.Wrap(err, "UtimesNanoAt") - } - - return dir.Close() + err := unix.UtimesNanoAt(unix.AT_FDCWD, path, times, unix.AT_SYMLINK_NOFOLLOW) + return errors.Wrap(err, "UtimesNanoAt") }