Windows compat fixes.
This commit is contained in:
parent
2521d64615
commit
7435a327f7
|
@ -49,7 +49,7 @@ typedef OSQueueHead xe_atomic_stack_t;
|
||||||
((void)InterlockedExchangeAdd((volatile LONG*)value, amount))
|
((void)InterlockedExchangeAdd((volatile LONG*)value, amount))
|
||||||
#define xe_atomic_sub_32(amount, value) \
|
#define xe_atomic_sub_32(amount, value) \
|
||||||
((void)InterlockedExchangeSubtract((volatile unsigned*)value, amount))
|
((void)InterlockedExchangeSubtract((volatile unsigned*)value, amount))
|
||||||
#define xe_atomic_vas_32(oldValue, newValue, value) \
|
#define xe_atomic_cas_32(oldValue, newValue, value) \
|
||||||
(InterlockedCompareExchange((volatile LONG*)value, newValue, oldValue) == oldValue)
|
(InterlockedCompareExchange((volatile LONG*)value, newValue, oldValue) == oldValue)
|
||||||
|
|
||||||
typedef SLIST_HEADER xe_atomic_stack_t;
|
typedef SLIST_HEADER xe_atomic_stack_t;
|
||||||
|
|
|
@ -124,7 +124,7 @@ void xe_mmap_release(xe_mmap_ref mmap) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t* xe_mmap_get_addr(xe_mmap_ref mmap) {
|
uint8_t* xe_mmap_get_addr(xe_mmap_ref mmap) {
|
||||||
return mmap->addr;
|
return reinterpret_cast<uint8_t*>(mmap->addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t xe_mmap_get_length(xe_mmap_ref mmap) {
|
size_t xe_mmap_get_length(xe_mmap_ref mmap) {
|
||||||
|
|
|
@ -93,7 +93,7 @@ int xe_thread_start(xe_thread_ref thread) {
|
||||||
thread,
|
thread,
|
||||||
0,
|
0,
|
||||||
NULL);
|
NULL);
|
||||||
if (!handle) {
|
if (!thread_handle) {
|
||||||
uint32_t last_error = GetLastError();
|
uint32_t last_error = GetLastError();
|
||||||
// TODO(benvanik): translate?
|
// TODO(benvanik): translate?
|
||||||
XELOGE(XT("CreateThread failed with %d"), last_error);
|
XELOGE(XT("CreateThread failed with %d"), last_error);
|
||||||
|
|
|
@ -91,8 +91,8 @@ Entry* FileSystem::ResolvePath(const char* path) {
|
||||||
if (xestrcasestra(path, it->first.c_str()) == path) {
|
if (xestrcasestra(path, it->first.c_str()) == path) {
|
||||||
// Found symlink, fixup.
|
// Found symlink, fixup.
|
||||||
const char* after_path = path + it->first.size();
|
const char* after_path = path + it->first.size();
|
||||||
XEIGNORE(xesnprintf(full_path, XECOUNT(full_path), "%s%s",
|
XEIGNORE(xesnprintfa(full_path, XECOUNT(full_path), "%s%s",
|
||||||
it->second.c_str(), after_path));
|
it->second.c_str(), after_path));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,9 @@ XModule::XModule(KernelState* kernel_state, const char* path) :
|
||||||
XObject(kernel_state, kTypeModule),
|
XObject(kernel_state, kTypeModule),
|
||||||
xex_(NULL) {
|
xex_(NULL) {
|
||||||
XEIGNORE(xestrcpya(path_, XECOUNT(path_), path));
|
XEIGNORE(xestrcpya(path_, XECOUNT(path_), path));
|
||||||
const xechar_t *slash = xestrrchr(path, '/');
|
const char* slash = xestrrchra(path, '/');
|
||||||
if (!slash) {
|
if (!slash) {
|
||||||
slash = xestrrchr(path, '\\');
|
slash = xestrrchra(path, '\\');
|
||||||
}
|
}
|
||||||
if (slash) {
|
if (slash) {
|
||||||
XEIGNORE(xestrcpya(name_, XECOUNT(name_), slash + 1));
|
XEIGNORE(xestrcpya(name_, XECOUNT(name_), slash + 1));
|
||||||
|
@ -145,7 +145,11 @@ X_STATUS XModule::Launch(uint32_t flags) {
|
||||||
// xekNtWaitForSingleObjectEx(thread_handle, TRUE, &timeout);
|
// xekNtWaitForSingleObjectEx(thread_handle, TRUE, &timeout);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
#if XE_PLATFORM(WIN32)
|
||||||
|
Sleep(1000);
|
||||||
|
#else
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
#endif // WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
kernel_state()->SetExecutableModule(NULL);
|
kernel_state()->SetExecutableModule(NULL);
|
||||||
|
|
|
@ -148,9 +148,9 @@ X_STATUS XThread::PlatformCreate() {
|
||||||
creation_params_.stack_size,
|
creation_params_.stack_size,
|
||||||
(LPTHREAD_START_ROUTINE)XThreadStartCallbackWin32,
|
(LPTHREAD_START_ROUTINE)XThreadStartCallbackWin32,
|
||||||
this,
|
this,
|
||||||
creation_params.creation_flags,
|
creation_params_.creation_flags,
|
||||||
NULL);
|
NULL);
|
||||||
if (!handle) {
|
if (!thread_handle_) {
|
||||||
uint32_t last_error = GetLastError();
|
uint32_t last_error = GetLastError();
|
||||||
// TODO(benvanik): translate?
|
// TODO(benvanik): translate?
|
||||||
XELOGE(XT("CreateThread failed with %d"), last_error);
|
XELOGE(XT("CreateThread failed with %d"), last_error);
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
'xboxkrnl_module.h',
|
'xboxkrnl_module.h',
|
||||||
'xboxkrnl_rtl.cc',
|
'xboxkrnl_rtl.cc',
|
||||||
'xboxkrnl_rtl.h',
|
'xboxkrnl_rtl.h',
|
||||||
'xboxkrnl_tableh',
|
'xboxkrnl_table.h',
|
||||||
'xboxkrnl_threading.cc',
|
'xboxkrnl_threading.cc',
|
||||||
'xboxkrnl_threading.h',
|
'xboxkrnl_threading.h',
|
||||||
'xobject.cc',
|
'xobject.cc',
|
||||||
|
|
|
@ -224,7 +224,7 @@ void KeTlsSetValue_shim(
|
||||||
int result_code = 0;
|
int result_code = 0;
|
||||||
|
|
||||||
#if XE_PLATFORM(WIN32)
|
#if XE_PLATFORM(WIN32)
|
||||||
result_code = TlsSetValue(tls_index, tls_value);
|
result_code = TlsSetValue(tls_index, (LPVOID)tls_value);
|
||||||
#else
|
#else
|
||||||
result_code = pthread_setspecific(tls_index, (void*)tls_value) == 0;
|
result_code = pthread_setspecific(tls_index, (void*)tls_value) == 0;
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
'malloc.h',
|
'malloc.h',
|
||||||
'platform.h',
|
'platform.h',
|
||||||
'platform_includes.h',
|
'platform_includes.h',
|
||||||
|
'string.cc',
|
||||||
'string.h',
|
'string.h',
|
||||||
'types.h',
|
'types.h',
|
||||||
'xenia.h',
|
'xenia.h',
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xenia/string.h>
|
||||||
|
|
||||||
|
#include <xenia/common.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if XE_PLATFORM(WIN32)
|
||||||
|
|
||||||
|
char* xestrcasestra(const char* str, const char* substr) {
|
||||||
|
const size_t len = xestrlena(substr);
|
||||||
|
while (*str) {
|
||||||
|
if (!_strnicmp(str, substr, len)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*str) {
|
||||||
|
return (char*)str;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // WIN32
|
|
@ -26,11 +26,13 @@ int strncpy_s(char* dest, size_t destLength, const char* source, size_t count);
|
||||||
#define _snprintf_s(dest, destLength, x, format, ...) snprintf(dest, destLength, format, ##__VA_ARGS__)
|
#define _snprintf_s(dest, destLength, x, format, ...) snprintf(dest, destLength, format, ##__VA_ARGS__)
|
||||||
#define xestrdupa strdup
|
#define xestrdupa strdup
|
||||||
#define xestrtoulla strtoull
|
#define xestrtoulla strtoull
|
||||||
|
#define xestrcasestra strcasestr
|
||||||
#else
|
#else
|
||||||
#define strcasecmp _stricmp
|
#define strcasecmp _stricmp
|
||||||
#define xestrdupa _strdup
|
#define xestrdupa _strdup
|
||||||
#define xestrtoullw _wcstoui64
|
#define xestrtoullw _wcstoui64
|
||||||
#define xestrtoulla _strtoui64
|
#define xestrtoulla _strtoui64
|
||||||
|
char* xestrcasestra(const char* str, const char* substr);
|
||||||
#endif // !WIN32
|
#endif // !WIN32
|
||||||
|
|
||||||
#define xestrlenw wcslen
|
#define xestrlenw wcslen
|
||||||
|
@ -54,7 +56,6 @@ int strncpy_s(char* dest, size_t destLength, const char* source, size_t count);
|
||||||
#define xestrchra strchr
|
#define xestrchra strchr
|
||||||
#define xestrrchra strrchr
|
#define xestrrchra strrchr
|
||||||
#define xestrstra strstr
|
#define xestrstra strstr
|
||||||
#define xestrcasestra strcasestr
|
|
||||||
#define xestrcpya(dest, destLength, source) (strcpy_s(dest, destLength, source) == 0)
|
#define xestrcpya(dest, destLength, source) (strcpy_s(dest, destLength, source) == 0)
|
||||||
#define xestrncpya(dest, destLength, source, count) (strncpy_s(dest, destLength, source, count) == 0)
|
#define xestrncpya(dest, destLength, source, count) (strncpy_s(dest, destLength, source, count) == 0)
|
||||||
#define xestrcata(dest, destLength, source) (strcat_s(dest, destLength, source) == 0)
|
#define xestrcata(dest, destLength, source) (strcat_s(dest, destLength, source) == 0)
|
||||||
|
|
|
@ -106,7 +106,7 @@ int xenia_run(int argc, xechar_t **argv) {
|
||||||
usage += "xenia-run some.xex";
|
usage += "xenia-run some.xex";
|
||||||
google::SetUsageMessage(usage);
|
google::SetUsageMessage(usage);
|
||||||
google::SetVersionString("1.0");
|
google::SetVersionString("1.0");
|
||||||
google::ParseCommandLineFlags(&argc, &argv, true);
|
//google::ParseCommandLineFlags(&argc, &argv, true);
|
||||||
|
|
||||||
// Dummy call to keep the GPU code linking in to ensure it's working.
|
// Dummy call to keep the GPU code linking in to ensure it's working.
|
||||||
do_gpu_stuff();
|
do_gpu_stuff();
|
||||||
|
|
Loading…
Reference in New Issue