return -1;
}
+typedef BOOLEAN (__stdcall *pCreateSymbolicLinkA_t)(LPCSTR, LPCSTR, DWORD);
+
+#ifndef SYMBOLIC_LINK_FLAG_DIRECTORY
+# define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1
+#endif
+
#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
# define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 0x2
#endif
const char *dest_path = oldfile;
char szTargetName[MAX_PATH+1];
size_t oldfile_len = strlen(oldfile);
+ pCreateSymbolicLinkA_t pCreateSymbolicLinkA =
+ (pCreateSymbolicLinkA_t)GetProcAddress(GetModuleHandle("kernel32.dll"), "CreateSymbolicLinkA");
DWORD dest_attr;
DWORD create_flags = 0;
create_flags |= SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE;
}
+ if (!pCreateSymbolicLinkA) {
+ errno = ENOSYS;
+ return -1;
+ }
+
/* oldfile might be relative and we don't want to change that,
so don't map that.
*/
create_flags |= SYMBOLIC_LINK_FLAG_DIRECTORY;
}
- if (!CreateSymbolicLinkA(newfile, oldfile, create_flags)) {
+ if (!pCreateSymbolicLinkA(newfile, oldfile, create_flags)) {
translate_to_errno();
return -1;
}