WinRT: implemented SDL_GetBasePath and SDL_GetPrefPath

This commit is contained in:
David Ludwig
2013-10-28 15:41:22 -04:00
parent 3f8f680891
commit 3236fc3a9f
5 changed files with 84 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
/* TODO, WinRT: include copyright info in SDL_winrtpaths.cpp
TODO, WinRT: add note to SDL_winrtpaths.cpp mentioning that /ZW must be used when compiling the file
TODO, WinRT: remove the need to compile this with C++/CX (/ZW) extensions, and if possible, without C++ at all
*/
#include "SDL_config.h"
@@ -7,10 +7,11 @@
#ifdef __WINRT__
extern "C" {
#include "SDL_filesystem.h"
#include "SDL_error.h"
#include "SDL_stdinc.h"
#include "SDL_system.h"
#include "../windows/SDL_windows.h"
#include "../../core/windows/SDL_windows.h"
}
#include <string>
@@ -91,4 +92,57 @@ SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType)
return utf8Paths[pathType].c_str();
}
extern "C" char *
SDL_GetBasePath(void)
{
const char * srcPath = SDL_WinRTGetFSPathUTF8(SDL_WINRT_PATH_INSTALLED_LOCATION);
size_t destPathLen;
char * destPath = NULL;
if (!srcPath) {
SDL_SetError("Couldn't locate our basepath: %s", SDL_GetError());
return NULL;
}
destPathLen = SDL_strlen(srcPath) + 2;
destPath = (char *) SDL_malloc(destPathLen);
if (!destPath) {
SDL_OutOfMemory();
return NULL;
}
SDL_snprintf(destPath, destPathLen, "%s\\", srcPath);
return destPath;
}
extern "C" char *
SDL_GetPrefPath(const char *org, const char *app)
{
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
/* A 'Roaming' folder is not available in Windows Phone 8, however a 'Local' folder is. */
const char * srcPath = SDL_WinRTGetFSPathUTF8(SDL_WINRT_PATH_LOCAL_FOLDER);
#else
/* A 'Roaming' folder is available on Windows 8 and 8.1. Use that. */
const char * srcPath = SDL_WinRTGetFSPathUTF8(SDL_WINRT_PATH_ROAMING_FOLDER);
#endif
size_t destPathLen;
char * destPath = NULL;
if (!srcPath) {
SDL_SetError("Couldn't locate our basepath: %s", SDL_GetError());
return NULL;
}
destPathLen = SDL_strlen(srcPath) + SDL_strlen(org) + SDL_strlen(app) + 4;
destPath = (char *) SDL_malloc(destPathLen);
if (!destPath) {
SDL_OutOfMemory();
return NULL;
}
SDL_snprintf(destPath, destPathLen, "%s\\%s\\%s\\", srcPath, org, app);
return destPath;
}
#endif /* __WINRT__ */