Skip to content

Commit 5b1ae4a

Browse files
committed
os/file: fixed compatibility with older Windows versions
1 parent f1df0d3 commit 5b1ae4a

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

src/os/file_windows.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,17 @@ func Symlink(oldname, newname string) error {
376376
flags |= syscall.SYMBOLIC_LINK_FLAG_DIRECTORY
377377
}
378378
err = syscall.CreateSymbolicLink(n, o, flags)
379+
380+
// creating symlinks unelevated is unsupported
381+
// below Windows 10 (1607, v10.0.14393).
382+
// retry without the SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
383+
if err == syscall.ERROR_INVALID_PARAMETER {
384+
flags &^= syscall.SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
385+
386+
err = syscall.CreateSymbolicLink(n, o, flags)
387+
}
388+
389+
// handle error
379390
if err != nil {
380391
return &LinkError{"symlink", oldname, newname, err}
381392
}

src/syscall/types_windows.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const (
1313
ERROR_HANDLE_EOF Errno = 38
1414
ERROR_NETNAME_DELETED Errno = 64
1515
ERROR_FILE_EXISTS Errno = 80
16+
ERROR_INVALID_PARAMETER Errno = 87
1617
ERROR_BROKEN_PIPE Errno = 109
1718
ERROR_BUFFER_OVERFLOW Errno = 111
1819
ERROR_INSUFFICIENT_BUFFER Errno = 122

0 commit comments

Comments
 (0)