WinRT: made path retrieval functions return wide-char strings

This commit is contained in:
David Ludwig 2013-02-03 12:34:34 -05:00
parent e14a2fd8b6
commit 31e3d85727
2 changed files with 31 additions and 12 deletions

View file

@ -105,7 +105,7 @@ extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath();
which do not work on Windows Phone 8 (and will return NULL if called which do not work on Windows Phone 8 (and will return NULL if called
from this platform). from this platform).
*/ */
extern DECLSPEC const char * SDLCALL SDL_WinRTGetLocalFolderPath(); extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetLocalFolderPath();
/* Gets the path to the roaming app data store. /* Gets the path to the roaming app data store.
Files and directories that should roam to different devices can be Files and directories that should roam to different devices can be
@ -117,7 +117,7 @@ extern DECLSPEC const char * SDLCALL SDL_WinRTGetLocalFolderPath();
as Windows Phone 8 apps do not have an accessible roaming app data as Windows Phone 8 apps do not have an accessible roaming app data
store. store.
*/ */
extern DECLSPEC const char * SDLCALL SDL_WinRTGetRoamingFolderPath(); extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetRoamingFolderPath();
/* Gets the path to the temporary app data store. /* Gets the path to the temporary app data store.
Files and directories may be written here, however they may be deleted Files and directories may be written here, however they may be deleted
@ -127,7 +127,7 @@ extern DECLSPEC const char * SDLCALL SDL_WinRTGetRoamingFolderPath();
as Windows Phone 8 apps do not have an accessible temporary app data as Windows Phone 8 apps do not have an accessible temporary app data
store. store.
*/ */
extern DECLSPEC const char * SDLCALL SDL_WinRTGetTemporaryFolderPath(); extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetTemporaryFolderPath();
#endif /* __WINRT__ */ #endif /* __WINRT__ */

View file

@ -7,37 +7,56 @@
#ifdef __WINRT__ #ifdef __WINRT__
extern "C" { extern "C" {
#include "SDL_error.h"
#include "SDL_stdinc.h"
#include "SDL_system.h" #include "SDL_system.h"
#include "../windows/SDL_windows.h" #include "../windows/SDL_windows.h"
} }
using namespace Windows::Storage; using namespace Windows::Storage;
extern "C" const char * SDL_WinRTGetLocalFolderPath() static const wchar_t *
WINRT_CopySystemPath(Windows::Storage::StorageFolder ^ folder)
{ {
static const char * path = nullptr; const wchar_t * srcPath = folder->Path->Data();
const size_t srcPathLen = SDL_wcslen(srcPath);
wchar_t * destPath = (wchar_t *) SDL_calloc(srcPathLen + 1, sizeof(wchar_t));
if (!destPath) {
SDL_OutOfMemory();
return NULL;
}
SDL_wcslcpy(destPath, srcPath, srcPathLen + 1);
return destPath;
}
extern "C" const wchar_t *
SDL_WinRTGetLocalFolderPath()
{
static const wchar_t * path = nullptr;
if (!path) { if (!path) {
path = WIN_StringToUTF8(ApplicationData::Current->LocalFolder->Path->Data()); path = WINRT_CopySystemPath(ApplicationData::Current->LocalFolder);
} }
return path; return path;
} }
extern "C" const char * SDL_WinRTGetRoamingFolderPath() extern "C" const wchar_t *
SDL_WinRTGetRoamingFolderPath()
{ {
// TODO, WinRT: make SDL_WinRTGetRoamingFolderPath return NULL on Windows Phone 8 // TODO, WinRT: make SDL_WinRTGetRoamingFolderPath return NULL on Windows Phone 8
static const char * path = nullptr; static const wchar_t * path = nullptr;
if (!path) { if (!path) {
path = WIN_StringToUTF8(ApplicationData::Current->RoamingFolder->Path->Data()); path = WINRT_CopySystemPath(ApplicationData::Current->RoamingFolder);
} }
return path; return path;
} }
extern "C" const char * SDL_WinRTGetTemporaryFolderPath() extern "C" const wchar_t *
SDL_WinRTGetTemporaryFolderPath()
{ {
// TODO, WinRT: make SDL_WinRTGetTemporaryFolderPath return NULL on Windows Phone 8 // TODO, WinRT: make SDL_WinRTGetTemporaryFolderPath return NULL on Windows Phone 8
static const char * path = nullptr; static const wchar_t * path = nullptr;
if (!path) { if (!path) {
path = WIN_StringToUTF8(ApplicationData::Current->TemporaryFolder->Path->Data()); path = WINRT_CopySystemPath(ApplicationData::Current->TemporaryFolder);
} }
return path; return path;
} }