Skip to content
Snippets Groups Projects
Commit 9c200ea0 authored by dg's avatar dg
Browse files

Fix loading saves on windows when the user has unicode in his windows username

git-svn-id: http://svn.net-core.org/repos/t-engine4@2641 51575b47-30f0-44d4-a5cc-537603b46e54
parent 14ce2042
No related branches found
No related tags found
No related merge requests found
......@@ -123,6 +123,7 @@ static HANDLE (WINAPI *pFindFirstFileW)(LPCWSTR, LPWIN32_FIND_DATAW);
static BOOL (WINAPI *pFindNextFileW)(HANDLE, LPWIN32_FIND_DATAW);
static DWORD (WINAPI *pGetCurrentDirectoryW)(DWORD, LPWSTR);
static BOOL (WINAPI *pDeleteFileW)(LPCWSTR);
static BOOL (WINAPI *pMoveFileW)(LPCWSTR,LPCWSTR);
static BOOL (WINAPI *pRemoveDirectoryW)(LPCWSTR);
static BOOL (WINAPI *pCreateDirectoryW)(LPCWSTR, LPSECURITY_ATTRIBUTES);
static BOOL (WINAPI *pGetFileAttributesExA)
......@@ -216,6 +217,25 @@ static BOOL WINAPI fallbackRemoveDirectoryW(LPCWSTR dname)
return(retval);
} /* fallbackRemoveDirectoryW */
static BOOL WINAPI fallbackMoveFileW(LPCWSTR fname1, LPCWSTR fname2)
{
BOOL retval = 0;
const int buflen1 = (int) (wStrLen(fname1) + 1);
char *cpstr1 = (char *) __PHYSFS_smallAlloc(buflen1);
WideCharToMultiByte(CP_ACP, 0, fname1, buflen1, cpstr1, buflen1, NULL, NULL);
const int buflen2 = (int) (wStrLen(fname2) + 1);
char *cpstr2 = (char *) __PHYSFS_smallAlloc(buflen2);
WideCharToMultiByte(CP_ACP, 0, fname2, buflen2, cpstr2, buflen2, NULL, NULL);
retval = MoveFile(cpstr1, cpstr2);
__PHYSFS_smallFree(cpstr1);
__PHYSFS_smallFree(cpstr2);
return(retval);
} /* fallbackRemoveDirectoryW */
static BOOL WINAPI fallbackCreateDirectoryW(LPCWSTR dname,
LPSECURITY_ATTRIBUTES attr)
{
......@@ -313,6 +333,7 @@ static int findApiSymbols(void)
LOOKUP(RemoveDirectoryW, osHasUnicode);
LOOKUP(CreateFileW, osHasUnicode);
LOOKUP(DeleteFileW, osHasUnicode);
LOOKUP(MoveFileW, osHasUnicode);
} /* if */
#undef LOOKUP_NOFALLBACK
......@@ -982,7 +1003,20 @@ int __PHYSFS_platformDeinit(void)
int __PHYSFS_platformRename(const char *filename1, const char *filename2)
{
return MoveFile(filename1, filename2);
WCHAR *wfname1, *wfname2;
UTF8_TO_UNICODE_STACK_MACRO(wfname1, filename1);
BAIL_IF_MACRO(wfname1 == NULL, ERR_OUT_OF_MEMORY, NULL);
UTF8_TO_UNICODE_STACK_MACRO(wfname2, filename2);
BAIL_IF_MACRO(wfname2 == NULL, ERR_OUT_OF_MEMORY, NULL);
BOOL ret = pMoveFileW(wfname1, wfname2);
__PHYSFS_smallFree(wfname1);
__PHYSFS_smallFree(wfname2);
return ret;
} /* __PHYSFS_platformRename */
static void *doOpen(const char *fname, DWORD mode, DWORD creation, int rdonly)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment