From a60da2ef388ca1b71433e6263c8855bff733f881 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Tue, 27 Feb 2024 17:12:07 +0000 Subject: [PATCH] local: fix setting of btime on directories on Windows Before this change this would give errors like this failed to set metadata on directory: failed to set birth (creation) time: Access is denied. This was caused by opening the directory in the wrong mode. --- backend/local/setbtime_windows.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/backend/local/setbtime_windows.go b/backend/local/setbtime_windows.go index adb9efa3a..2a46f09eb 100644 --- a/backend/local/setbtime_windows.go +++ b/backend/local/setbtime_windows.go @@ -4,7 +4,6 @@ package local import ( - "os" "syscall" "time" ) @@ -13,7 +12,13 @@ const haveSetBTime = true // setBTime sets the birth time of the file passed in func setBTime(name string, btime time.Time) (err error) { - h, err := syscall.Open(name, os.O_RDWR, 0755) + pathp, err := syscall.UTF16PtrFromString(name) + if err != nil { + return err + } + h, err := syscall.CreateFile(pathp, + syscall.FILE_WRITE_ATTRIBUTES, syscall.FILE_SHARE_WRITE, nil, + syscall.OPEN_EXISTING, syscall.FILE_FLAG_BACKUP_SEMANTICS, 0) if err != nil { return err }