|
From: <lab...@us...> - 2016-12-08 11:05:39
|
Revision: 1543
http://sourceforge.net/p/opengtoolkit/svn/1543
Author: labviewer
Date: 2016-12-08 11:05:37 +0000 (Thu, 08 Dec 2016)
Log Message:
-----------
Allow for dynamic loading of SymbolicLink API
Modified Paths:
--------------
trunk/lvzip/c_source/lvutil.c
trunk/lvzip/c_source/lvutil.h
trunk/lvzip/c_source/zlibvc.vcproj
Modified: trunk/lvzip/c_source/lvutil.c
===================================================================
--- trunk/lvzip/c_source/lvutil.c 2016-12-04 23:36:48 UTC (rev 1542)
+++ trunk/lvzip/c_source/lvutil.c 2016-12-08 11:05:37 UTC (rev 1543)
@@ -6,9 +6,9 @@
*/
#define ZLIB_INTERNAL
+#include "lvutil.h"
#include "zlib.h"
#include "ioapi.h"
-#include "lvutil.h"
#include "iomem.h"
#include "utf.h"
#if Unix
@@ -381,6 +381,7 @@
case ERROR_SHARING_VIOLATION: return fNoPerm;
case ERROR_ALREADY_EXISTS:
case ERROR_FILE_EXISTS: return fDupPath;
+ case ERROR_NOT_SUPPORTED: return mgNotSupported;
case ERROR_NO_MORE_FILES: return mgNoErr;
}
return fIOErr; /* fIOErr generally signifies some unknown file error */
@@ -1595,6 +1596,48 @@
return err;
}
+#if Win32
+typedef BOOL (WINAPI *tCreateHardLinkW)(LPCWSTR lpFileName, LPCWSTR lpExistingFileName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
+BOOL Win32CreateHardLinkW(LPCWSTR lpFileName, LPCWSTR lpExistingFileName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
+{
+ static tCreateHardLinkW pCreateHardLinkW = NULL;
+ if (!pCreateHardLinkW)
+ {
+ HMODULE hLib = LoadLibrary("kernel32.dll");
+ if (hLib)
+ {
+ pCreateHardLinkW = (tCreateHardLinkW)GetProcAddress(hLib, "CreateHardLinkW");
+ }
+ }
+ if (pCreateHardLinkW)
+ {
+ return pCreateHardLinkW(lpFileName, lpExistingFileName, lpSecurityAttributes);
+ }
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return FALSE;
+}
+
+typedef BOOL (WINAPI *tCreateSymbolicLinkW)(LPCWSTR lpSymlinkFileName, LPCWSTR lpTargetFileName, DWORD dwFlags);
+BOOL Win32CreateSymbolicLinkW(LPCWSTR lpSymlinkFileName, LPCWSTR lpTargetFileName, DWORD dwFlags)
+{
+ static tCreateSymbolicLinkW pCreateSymbolicLinkW = NULL;
+ if (!pCreateSymbolicLinkW)
+ {
+ HMODULE hLib = LoadLibrary("kernel32.dll");
+ if (hLib)
+ {
+ pCreateSymbolicLinkW = (tCreateSymbolicLinkW)GetProcAddress(hLib, "CreateSymbolicLinkW");
+ }
+ }
+ if (pCreateSymbolicLinkW)
+ {
+ return pCreateSymbolicLinkW(lpSymlinkFileName, lpTargetFileName, dwFlags);
+ }
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return FALSE;
+}
+#endif
+
LibAPI(MgErr) LVPath_CreateLink(Path path, uInt32 flags, Path target)
{
MgErr err = mgNoErr;
@@ -1621,7 +1664,7 @@
if (symlink((const char*)LStrBuf(src), (const char*)LStrBuf(tgt)))
err = UnixToLVFileErr();
}
-#elif Win32
+#elif Win32 && !EMBEDDED
if (FExists(target))
{
FInfoRec finfo;
@@ -1636,13 +1679,15 @@
if (flags & kLinkHard)
{
if (flags & kLinkDir)
+ {
err = mgNotSupported;
- else if (!CreateHardLinkW(UStrBuf(src), UStrBuf(tgt), NULL))
+ }
+ else if (!Win32CreateHardLinkW(UStrBuf(src), UStrBuf(tgt), NULL))
{
err = Win32ToLVFileErr();
}
}
- else if (!CreateSymbolicLinkW(UStrBuf(src), UStrBuf(tgt), flags & kLinkDir ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0))
+ else if (!Win32CreateSymbolicLinkW(UStrBuf(src), UStrBuf(tgt), flags & kLinkDir ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0))
{
err = Win32ToLVFileErr();
}
@@ -1774,7 +1819,7 @@
if (!err)
{
LStrHandle handle = NULL;
- err = WideCStrToMultiByte((LPCWCHAR)wTgt, -1, &handle, CP_ACP, 0, NULL);
+ err = WideCStrToMultiByte((LPCWSTR)wTgt, -1, &handle, CP_ACP, 0, NULL);
if (!err)
err = FTextToPath(LStrBuf(*handle), LStrLen(*handle), target);
if (handle)
@@ -2566,7 +2611,7 @@
#endif
}
-LibAPI(uInt32) determine_codepage(uLong *flags, LStrHandle string)
+LibAPI(uInt32) determine_codepage(uInt32 *flags, LStrHandle string)
{
uInt32 cp = Hi16(*flags);
if (!cp)
Modified: trunk/lvzip/c_source/lvutil.h
===================================================================
--- trunk/lvzip/c_source/lvutil.h 2016-12-04 23:36:48 UTC (rev 1542)
+++ trunk/lvzip/c_source/lvutil.h 2016-12-08 11:05:37 UTC (rev 1543)
@@ -65,6 +65,7 @@
#define DEBUG 1
#endif
#define BigEndian 0
+ #define _WIN32_WINNT 0x0501
#elif defined(linux) || defined(__linux) || defined(__linux__)
#if defined(i386)
#define ProcessorType kX86
@@ -618,7 +619,7 @@
/**************************/
/* Version string of the zlib library */
-LibAPI(void) DLLVersion OF((uChar* Version));
+LibAPI(void) DLLVersion(uChar* Version);
/* Convert the path into a string representation for the current platform */
LibAPI(MgErr) LVPath_ToText(Path path, LStrHandle *str);
@@ -680,14 +681,14 @@
uInt16 str[1];
} UString, *UStrPtr, **UStrHandle;
-#define UStrLen(s) LStrLen(s) * sizeof(uInt16) / sizeof(wchar_t)
+#define UStrLen(s) (int32)(LStrLen(s) * sizeof(uInt16) / sizeof(wchar_t))
#define UStrLenSet(s, l) LStrLen(s) = l * sizeof(wchar_t) / sizeof(uInt16)
#define UStrBuf(s) ((wchar_t*)(LStrBuf(s)))
LibAPI(MgErr) ZeroTerminateLString(LStrHandle *dest);
LibAPI(uInt32) GetCurrentCodePage(LVBoolean acp);
-LibAPI(uInt32) determine_codepage(uLong *flags, LStrHandle string);
+LibAPI(uInt32) determine_codepage(uInt32 *flags, LStrHandle string);
LibAPI(MgErr) MultiByteCStrToWideString(ConstCStr src, int32 srclen, UStrHandle *dest, uInt32 codePage);
LibAPI(MgErr) MultiByteToWideString(const LStrHandle src, UStrHandle *dest, uInt32 codePage);
LibAPI(MgErr) WideStringToMultiByte(const UStrHandle src, LStrHandle *dest, uInt32 codePage, char defaultChar, LVBoolean *defaultCharWasUsed);
Modified: trunk/lvzip/c_source/zlibvc.vcproj
===================================================================
--- trunk/lvzip/c_source/zlibvc.vcproj 2016-12-04 23:36:48 UTC (rev 1542)
+++ trunk/lvzip/c_source/zlibvc.vcproj 2016-12-08 11:05:37 UTC (rev 1543)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8.00"
+ Version="8,00"
Name="zlibvc"
ProjectGUID="{FF990D80-DB65-4107-B10C-5F7ACEF6F01B}"
RootNamespace="zlibvc"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|