diff options
-rw-r--r-- | win32/mingw.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/win32/mingw.c b/win32/mingw.c index 7ce60139e..fa68ea608 100644 --- a/win32/mingw.c +++ b/win32/mingw.c | |||
@@ -1196,7 +1196,7 @@ int symlink(const char *target, const char *linkpath) | |||
1196 | DWORD flag = SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE; | 1196 | DWORD flag = SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE; |
1197 | struct stat st; | 1197 | struct stat st; |
1198 | DECLARE_PROC_ADDR(BOOLEAN, CreateSymbolicLinkA, LPCSTR, LPCSTR, DWORD); | 1198 | DECLARE_PROC_ADDR(BOOLEAN, CreateSymbolicLinkA, LPCSTR, LPCSTR, DWORD); |
1199 | char *relative = NULL; | 1199 | char *targ, *relative = NULL; |
1200 | 1200 | ||
1201 | if (!INIT_PROC_ADDR(kernel32.dll, CreateSymbolicLinkA)) { | 1201 | if (!INIT_PROC_ADDR(kernel32.dll, CreateSymbolicLinkA)) { |
1202 | return -1; | 1202 | return -1; |
@@ -1213,8 +1213,11 @@ int symlink(const char *target, const char *linkpath) | |||
1213 | flag |= SYMBOLIC_LINK_FLAG_DIRECTORY; | 1213 | flag |= SYMBOLIC_LINK_FLAG_DIRECTORY; |
1214 | free(relative); | 1214 | free(relative); |
1215 | 1215 | ||
1216 | targ = auto_string(strdup(target)); | ||
1217 | slash_to_bs(targ); | ||
1218 | |||
1216 | retry: | 1219 | retry: |
1217 | if (!CreateSymbolicLinkA(linkpath, target, flag)) { | 1220 | if (!CreateSymbolicLinkA(linkpath, targ, flag)) { |
1218 | /* Old Windows versions see 'UNPRIVILEGED_CREATE' as an invalid | 1221 | /* Old Windows versions see 'UNPRIVILEGED_CREATE' as an invalid |
1219 | * parameter. Retry without it. */ | 1222 | * parameter. Retry without it. */ |
1220 | if ((flag & SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) && | 1223 | if ((flag & SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) && |