From ee7ad94720483fc24deb108441b65acf8e03f66d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 22 Nov 2014 01:32:31 +0000 Subject: Windows fixes (thanks John Emmas). git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@5491 a436a847-0d15-0410-975c-d299462d15a1 --- src/util.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/util.c') diff --git a/src/util.c b/src/util.c index b38e58a..76c5a9d 100644 --- a/src/util.c +++ b/src/util.c @@ -35,6 +35,17 @@ # include # define F_OK 0 # define mkdir(path, flags) _mkdir(path) +# if (defined(_MSC_VER) && (_MSC_VER < 1500)) +/** Implement 'CreateSymbolicLink()' for MSVC 8 or earlier */ +BOOLEAN WINAPI +CreateSymbolicLink(LPCTSTR linkpath, LPCTSTR targetpath, DWORD flags) +{ + typedef BOOLEAN (WINAPI* PFUNC)(LPCTSTR, LPCTSTR, DWORD); + + PFUNC pfn = (PFUNC)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "CreateSymbolicLinkA"); + return pfn ? pfn(linkpath, targetpath, flags) : 0; +} +# endif /* _MSC_VER < 1500 */ #else # include # include @@ -429,6 +440,9 @@ lilv_symlink(const char* oldpath, const char* newpath) if (strcmp(oldpath, newpath)) { #ifdef _WIN32 ret = !CreateSymbolicLink(newpath, oldpath, 0); + if (ret) { + ret = !CreateHardLink(newpath, oldpath, 0); + } #else ret = symlink(oldpath, newpath); #endif -- cgit v1.2.1