mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 11:06:06 -04:00
Split up platform and dynamic lib blocks of code in Platform.c for nicer looking code
This commit is contained in:
parent
b410386a2e
commit
4a5594f577
@ -528,9 +528,11 @@ bool Launcher_StartGame(const String* user, const String* mppass, const String*
|
|||||||
Options_Save();
|
Options_Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef CC_BUILD_ANDROID
|
||||||
String_InitArray(path, pathBuffer);
|
String_InitArray(path, pathBuffer);
|
||||||
res = Process_GetExePath(&path);
|
res = Process_GetExePath(&path);
|
||||||
if (res) { Logger_Warn(res, "getting .exe path"); return false; }
|
if (res) { Logger_Warn(res, "getting .exe path"); return false; }
|
||||||
|
#endif
|
||||||
|
|
||||||
String_InitArray(args, argsBuffer);
|
String_InitArray(args, argsBuffer);
|
||||||
String_AppendString(&args, user);
|
String_AppendString(&args, user);
|
||||||
|
183
src/Platform.c
183
src/Platform.c
@ -1553,15 +1553,6 @@ ReturnCode Socket_Poll(SocketHandle socket, int mode, bool* success) {
|
|||||||
*-----------------------------------------------------Process/Module------------------------------------------------------*
|
*-----------------------------------------------------Process/Module------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
#if defined CC_BUILD_WIN
|
#if defined CC_BUILD_WIN
|
||||||
ReturnCode Process_GetExePath(String* path) {
|
|
||||||
TCHAR chars[FILENAME_SIZE + 1];
|
|
||||||
DWORD len = GetModuleFileName(NULL, chars, FILENAME_SIZE);
|
|
||||||
if (!len) return GetLastError();
|
|
||||||
|
|
||||||
Platform_DecodeString(path, chars, len);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ReturnCode Process_RawStart(const TCHAR* path, TCHAR* args) {
|
static ReturnCode Process_RawStart(const TCHAR* path, TCHAR* args) {
|
||||||
STARTUPINFO si = { 0 };
|
STARTUPINFO si = { 0 };
|
||||||
PROCESS_INFORMATION pi = { 0 };
|
PROCESS_INFORMATION pi = { 0 };
|
||||||
@ -1589,6 +1580,7 @@ ReturnCode Process_Start(const String* path, const String* args) {
|
|||||||
|
|
||||||
return Process_RawStart(str, raw);
|
return Process_RawStart(str, raw);
|
||||||
}
|
}
|
||||||
|
void Process_Exit(ReturnCode code) { ExitProcess(code); }
|
||||||
|
|
||||||
ReturnCode Process_StartOpen(const String* args) {
|
ReturnCode Process_StartOpen(const String* args) {
|
||||||
TCHAR str[300];
|
TCHAR str[300];
|
||||||
@ -1606,27 +1598,17 @@ ReturnCode Process_StartShell(void) {
|
|||||||
return Process_RawStart(NULL, str);
|
return Process_RawStart(NULL, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Process_Exit(ReturnCode code) { ExitProcess(code); }
|
ReturnCode Process_GetExePath(String* path) {
|
||||||
|
TCHAR chars[FILENAME_SIZE + 1];
|
||||||
|
DWORD len = GetModuleFileName(NULL, chars, FILENAME_SIZE);
|
||||||
|
if (!len) return GetLastError();
|
||||||
|
|
||||||
ReturnCode DynamicLib_Load(const String* path, void** lib) {
|
Platform_DecodeString(path, chars, len);
|
||||||
TCHAR str[300];
|
return 0;
|
||||||
Platform_ConvertString(str, path);
|
|
||||||
*lib = LoadLibrary(str);
|
|
||||||
return *lib ? 0 : GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
ReturnCode DynamicLib_Get(void* lib, const char* name, void** symbol) {
|
|
||||||
*symbol = GetProcAddress((HMODULE)lib, name);
|
|
||||||
return *symbol ? 0 : GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DynamicLib_DescribeError(ReturnCode res, String* dst) {
|
|
||||||
return Platform_DescribeError(res, dst);
|
|
||||||
}
|
}
|
||||||
#elif defined CC_BUILD_WEB
|
#elif defined CC_BUILD_WEB
|
||||||
ReturnCode Process_GetExePath(String* path) { return ERR_NOT_SUPPORTED; }
|
|
||||||
ReturnCode Process_Start(const String* path, const String* args) { return ERR_NOT_SUPPORTED; }
|
ReturnCode Process_Start(const String* path, const String* args) { return ERR_NOT_SUPPORTED; }
|
||||||
ReturnCode Process_StartShell(void) { return ERR_NOT_SUPPORTED; }
|
void Process_Exit(ReturnCode code) { exit(code); }
|
||||||
|
|
||||||
ReturnCode Process_StartOpen(const String* args) {
|
ReturnCode Process_StartOpen(const String* args) {
|
||||||
char str[600];
|
char str[600];
|
||||||
@ -1634,11 +1616,23 @@ ReturnCode Process_StartOpen(const String* args) {
|
|||||||
EM_ASM_({ window.open(UTF8ToString($0)); }, str);
|
EM_ASM_({ window.open(UTF8ToString($0)); }, str);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnCode Process_StartShell(void) { return ERR_NOT_SUPPORTED; }
|
||||||
|
ReturnCode Process_GetExePath(String* path) { return ERR_NOT_SUPPORTED; }
|
||||||
|
#elif defined CC_BUILD_ANDROID
|
||||||
|
ReturnCode Process_Start(const String* path, const String* args) {
|
||||||
|
JavaCall_String_Void("startGame", args);
|
||||||
|
return 0; /* TODO: Is there a clean way of handling an error */
|
||||||
|
}
|
||||||
void Process_Exit(ReturnCode code) { exit(code); }
|
void Process_Exit(ReturnCode code) { exit(code); }
|
||||||
|
|
||||||
ReturnCode DynamicLib_Load(const String* path, void** lib) { return ERR_NOT_SUPPORTED; }
|
ReturnCode Process_StartOpen(const String* args) {
|
||||||
ReturnCode DynamicLib_Get(void* lib, const char* name, void** symbol) { return ERR_NOT_SUPPORTED; }
|
JavaCall_String_Void("startOpen", args);
|
||||||
bool DynamicLib_DescribeError(ReturnCode res, String* dst) { return false; }
|
return 0; /* TODO: Is there a clean way of handling an error */
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnCode Process_StartShell(void) { return ERR_NOT_SUPPORTED; }
|
||||||
|
ReturnCode Process_GetExePath(String* path) { return ERR_NOT_SUPPORTED; }
|
||||||
#elif defined CC_BUILD_POSIX
|
#elif defined CC_BUILD_POSIX
|
||||||
ReturnCode Process_Start(const String* path, const String* args) {
|
ReturnCode Process_Start(const String* path, const String* args) {
|
||||||
char str[600], raw[600];
|
char str[600], raw[600];
|
||||||
@ -1675,26 +1669,8 @@ ReturnCode Process_Start(const String* path, const String* args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Process_Exit(ReturnCode code) { exit(code); }
|
void Process_Exit(ReturnCode code) { exit(code); }
|
||||||
|
|
||||||
ReturnCode DynamicLib_Load(const String* path, void** lib) {
|
|
||||||
char str[600];
|
|
||||||
Platform_ConvertString(str, path);
|
|
||||||
*lib = dlopen(str, RTLD_NOW);
|
|
||||||
return *lib == NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ReturnCode DynamicLib_Get(void* lib, const char* name, void** symbol) {
|
|
||||||
*symbol = dlsym(lib, name);
|
|
||||||
return *symbol == NULL; /* dlerror would be proper, but eh */
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DynamicLib_DescribeError(ReturnCode res, String* dst) {
|
|
||||||
char* err = dlerror();
|
|
||||||
if (err) String_AppendConst(dst, err);
|
|
||||||
return err && err[0];
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
/* Opening browser and retrieving exe path is not standardised at all */
|
/* Opening browser and starting shell is not really standardised */
|
||||||
#if defined CC_BUILD_OSX
|
#if defined CC_BUILD_OSX
|
||||||
ReturnCode Process_StartOpen(const String* args) {
|
ReturnCode Process_StartOpen(const String* args) {
|
||||||
static const String path = String_FromConst("/usr/bin/open");
|
static const String path = String_FromConst("/usr/bin/open");
|
||||||
@ -1705,24 +1681,6 @@ ReturnCode Process_StartShell(void) {
|
|||||||
static const String args = String_FromConst("-a Terminal ./update.sh");
|
static const String args = String_FromConst("-a Terminal ./update.sh");
|
||||||
return Process_Start(&path, &args);
|
return Process_Start(&path, &args);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnCode Process_GetExePath(String* path) {
|
|
||||||
char str[600] = { 0 };
|
|
||||||
uint32_t len = 600;
|
|
||||||
if (_NSGetExecutablePath(str, &len)) return ERR_INVALID_ARGUMENT;
|
|
||||||
|
|
||||||
len = String_CalcLen(str, 600);
|
|
||||||
Platform_DecodeString(path, str, len);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#elif defined CC_BUILD_ANDROID
|
|
||||||
ReturnCode Process_StartOpen(const String* args) {
|
|
||||||
JavaCall_String_Void("startOpen", args);
|
|
||||||
return 0; /* TODO: Is there a clean way of handling an error */
|
|
||||||
}
|
|
||||||
|
|
||||||
ReturnCode Process_StartShell(void) { return ERR_NOT_SUPPORTED; }
|
|
||||||
ReturnCode Process_GetExePath(String* path) { return ERR_NOT_SUPPORTED; }
|
|
||||||
#elif defined CC_BUILD_UNIX
|
#elif defined CC_BUILD_UNIX
|
||||||
ReturnCode Process_StartOpen(const String* args) {
|
ReturnCode Process_StartOpen(const String* args) {
|
||||||
/* TODO: Can this be used on original Solaris, or is it just an OpenIndiana thing */
|
/* TODO: Can this be used on original Solaris, or is it just an OpenIndiana thing */
|
||||||
@ -1733,8 +1691,19 @@ ReturnCode Process_StartShell(void) {
|
|||||||
static const String path = String_FromConst("xterm");
|
static const String path = String_FromConst("xterm");
|
||||||
static const String args = String_FromConst("-e ./update.sh");
|
static const String args = String_FromConst("-e ./update.sh");
|
||||||
return Process_Start(&path, &args);
|
return Process_Start(&path, &args);
|
||||||
|
#endif
|
||||||
|
/* Retrieving exe path is completely OS dependant */
|
||||||
|
#if defined CC_BUILD_OSX
|
||||||
|
ReturnCode Process_GetExePath(String* path) {
|
||||||
|
char str[600] = { 0 };
|
||||||
|
uint32_t len = 600;
|
||||||
|
if (_NSGetExecutablePath(str, &len)) return ERR_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
len = String_CalcLen(str, 600);
|
||||||
|
Platform_DecodeString(path, str, len);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#if defined CC_BUILD_LINUX
|
#elif defined CC_BUILD_LINUX
|
||||||
ReturnCode Process_GetExePath(String* path) {
|
ReturnCode Process_GetExePath(String* path) {
|
||||||
char str[600];
|
char str[600];
|
||||||
int len = readlink("/proc/self/exe", str, 600);
|
int len = readlink("/proc/self/exe", str, 600);
|
||||||
@ -1801,6 +1770,49 @@ ReturnCode Process_GetExePath(String* path) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*########################################################################################################################*
|
||||||
|
*-------------------------------------------------------Dynamic lib-------------------------------------------------------*
|
||||||
|
*#########################################################################################################################*/
|
||||||
|
#if defined CC_BUILD_WIN
|
||||||
|
ReturnCode DynamicLib_Load(const String* path, void** lib) {
|
||||||
|
TCHAR str[300];
|
||||||
|
Platform_ConvertString(str, path);
|
||||||
|
*lib = LoadLibrary(str);
|
||||||
|
return *lib ? 0 : GetLastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnCode DynamicLib_Get(void* lib, const char* name, void** symbol) {
|
||||||
|
*symbol = GetProcAddress((HMODULE)lib, name);
|
||||||
|
return *symbol ? 0 : GetLastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DynamicLib_DescribeError(ReturnCode res, String* dst) {
|
||||||
|
return Platform_DescribeError(res, dst);
|
||||||
|
}
|
||||||
|
#elif defined CC_BUILD_WEB
|
||||||
|
ReturnCode DynamicLib_Load(const String* path, void** lib) { return ERR_NOT_SUPPORTED; }
|
||||||
|
ReturnCode DynamicLib_Get(void* lib, const char* name, void** symbol) { return ERR_NOT_SUPPORTED; }
|
||||||
|
bool DynamicLib_DescribeError(ReturnCode res, String* dst) { return false; }
|
||||||
|
#elif defined CC_BUILD_POSIX
|
||||||
|
ReturnCode DynamicLib_Load(const String* path, void** lib) {
|
||||||
|
char str[600];
|
||||||
|
Platform_ConvertString(str, path);
|
||||||
|
*lib = dlopen(str, RTLD_NOW);
|
||||||
|
return *lib == NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnCode DynamicLib_Get(void* lib, const char* name, void** symbol) {
|
||||||
|
*symbol = dlsym(lib, name);
|
||||||
|
return *symbol == NULL; /* dlerror would be proper, but eh */
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DynamicLib_DescribeError(ReturnCode res, String* dst) {
|
||||||
|
char* err = dlerror();
|
||||||
|
if (err) String_AppendConst(dst, err);
|
||||||
|
return err && err[0];
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void* DynamicLib_GetFrom(const char* filename, const char* name) {
|
void* DynamicLib_GetFrom(const char* filename, const char* name) {
|
||||||
@ -1997,6 +2009,7 @@ static void Platform_InitCommon(void) {
|
|||||||
}
|
}
|
||||||
void Platform_Free(void) { }
|
void Platform_Free(void) { }
|
||||||
|
|
||||||
|
#ifndef CC_BUILD_ANDROID
|
||||||
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, String* args) {
|
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, String* args) {
|
||||||
int i, count;
|
int i, count;
|
||||||
argc--; /* skip executable path argument */
|
argc--; /* skip executable path argument */
|
||||||
@ -2007,6 +2020,7 @@ int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, String* args)
|
|||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ReturnCode Platform_Encrypt(const void* data, int len, uint8_t** enc, int* encLen) {
|
ReturnCode Platform_Encrypt(const void* data, int len, uint8_t** enc, int* encLen) {
|
||||||
return ERR_NOT_SUPPORTED;
|
return ERR_NOT_SUPPORTED;
|
||||||
@ -2040,7 +2054,7 @@ static void Platform_InitStopwatch(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Platform_Init(void) {
|
void Platform_Init(void) {
|
||||||
ProcessSerialNumber psn;
|
ProcessSerialNumber psn; /* TODO: kCurrentProcess */
|
||||||
Platform_InitCommon();
|
Platform_InitCommon();
|
||||||
Platform_InitStopwatch();
|
Platform_InitStopwatch();
|
||||||
|
|
||||||
@ -2086,6 +2100,39 @@ void* App_Ptr;
|
|||||||
JavaVM* VM_Ptr;
|
JavaVM* VM_Ptr;
|
||||||
void Platform_Init(void) { Platform_InitCommon(); }
|
void Platform_Init(void) { Platform_InitCommon(); }
|
||||||
|
|
||||||
|
static String Platform_GetCmdLineArg(int i) {
|
||||||
|
String arg, copy;
|
||||||
|
JNIEnv* env;
|
||||||
|
jvalue args[1];
|
||||||
|
jobject obj;
|
||||||
|
|
||||||
|
JavaGetCurrentEnv(env);
|
||||||
|
args[0].i = i;
|
||||||
|
obj = JavaCallObject(env, "getCmdLineArg", "(I)Ljava/lang/String;", args);
|
||||||
|
if (!obj) return String_Empty;
|
||||||
|
|
||||||
|
Platform_LogConst("ARGg..");
|
||||||
|
arg = JavaGetString(env, obj);
|
||||||
|
|
||||||
|
copy.buffer = Mem_Alloc(arg.length, 1, "cmdline arg");
|
||||||
|
copy.length = arg.length;
|
||||||
|
copy.capacity = arg.length;
|
||||||
|
Mem_Copy(arg.buffer, copy.buffer, arg.length);
|
||||||
|
|
||||||
|
(*env)->ReleaseStringUTFChars(env, obj, arg.buffer);
|
||||||
|
(*env)->DeleteLocalRef(env, obj);
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, String* args) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < GAME_MAX_CMDARGS; i++) {
|
||||||
|
args[i] = Platform_GetCmdLineArg(i);
|
||||||
|
if (!args[i].buffer) break;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
void Platform_SetDefaultCurrentDirectory(void) {
|
void Platform_SetDefaultCurrentDirectory(void) {
|
||||||
struct android_app* app = (struct android_app*)App_Ptr;
|
struct android_app* app = (struct android_app*)App_Ptr;
|
||||||
const char* storageDir = app->activity->externalDataPath;
|
const char* storageDir = app->activity->externalDataPath;
|
||||||
|
@ -61,17 +61,17 @@ ReturnCode Platform_Decrypt(const void* data, int len, uint8_t** dec, int* decLe
|
|||||||
describe exists (e.g. DynamicLib_DescribeError), that should be preferred. */
|
describe exists (e.g. DynamicLib_DescribeError), that should be preferred. */
|
||||||
bool Platform_DescribeError(ReturnCode res, String* dst);
|
bool Platform_DescribeError(ReturnCode res, String* dst);
|
||||||
|
|
||||||
/* Returns the full path of the application's executable. */
|
|
||||||
CC_API ReturnCode Process_GetExePath(String* path);
|
|
||||||
/* Starts the given program with the given arguments. */
|
/* Starts the given program with the given arguments. */
|
||||||
CC_API ReturnCode Process_Start(const String* path, const String* args);
|
CC_API ReturnCode Process_Start(const String* path, const String* args);
|
||||||
|
/* Terminates the process with the given return code. */
|
||||||
|
CC_API void Process_Exit(ReturnCode code);
|
||||||
/* Starts the platform-specific program to open the given url or filename. */
|
/* Starts the platform-specific program to open the given url or filename. */
|
||||||
/* For example, provide a http:// url to open a website in the user's web browser. */
|
/* For example, provide a http:// url to open a website in the user's web browser. */
|
||||||
CC_API ReturnCode Process_StartOpen(const String* args);
|
CC_API ReturnCode Process_StartOpen(const String* args);
|
||||||
/* Starts the platform-specific shell to execute the script in UPDATE_FILENAME. */
|
/* Starts the platform-specific shell to execute the script in UPDATE_FILENAME. */
|
||||||
CC_API ReturnCode Process_StartShell(void);
|
CC_API ReturnCode Process_StartShell(void);
|
||||||
/* Terminates the process with the given return code. */
|
/* Returns the full path of the application's executable. */
|
||||||
CC_API void Process_Exit(ReturnCode code);
|
CC_API ReturnCode Process_GetExePath(String* path);
|
||||||
|
|
||||||
/* Attempts to load a native dynamic library from the given path. */
|
/* Attempts to load a native dynamic library from the given path. */
|
||||||
CC_API ReturnCode DynamicLib_Load(const String* path, void** lib);
|
CC_API ReturnCode DynamicLib_Load(const String* path, void** lib);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user