more cl funcs

This commit is contained in:
rjkiv 2025-08-04 10:53:35 -07:00
parent 459efea654
commit dc2ad0d678
2 changed files with 47 additions and 0 deletions

View File

@ -2174,6 +2174,11 @@ namespace kernel32 {
return 1; // EXCEPTION_EXECUTE_HANDLER
}
unsigned int WIN_FUNC SetErrorMode(unsigned int mode){
DEBUG_LOG("SetErrorMode: %d\n", mode);
return 0;
}
struct SINGLE_LIST_ENTRY
{
SINGLE_LIST_ENTRY *Next;
@ -2481,6 +2486,7 @@ static void *resolveByName(const char *name) {
// errhandlingapi.h
if (strcmp(name, "SetUnhandledExceptionFilter") == 0) return (void *) kernel32::SetUnhandledExceptionFilter;
if (strcmp(name, "UnhandledExceptionFilter") == 0) return (void *) kernel32::UnhandledExceptionFilter;
if (strcmp(name, "SetErrorMode") == 0) return (void*)kernel32::SetErrorMode;
// interlockedapi.h
if (strcmp(name, "InitializeSListHead") == 0) return (void *) kernel32::InitializeSListHead;

View File

@ -154,10 +154,48 @@ namespace msvcrt {
DEBUG_LOG("Bad wide arg conversion for %d!\n", i);
}
}
__winitenv = *wenv;
}
return 0;
}
char WIN_ENTRY *setlocale(int category, const char *locale){
DEBUG_LOG("STUB: setlocale(%d, %s)\n", category, locale);
return (char*)"C";
}
int WIN_ENTRY _wdupenv_s(wchar_t **buffer, size_t *numberOfElements, const wchar_t *varname){
// just gonna stub all this out for now
// if it turns out we need this, troubleshoot wscspy
// if(!buffer || !varname) return -1;
// if(numberOfElements) *numberOfElements = 0;
// size_t varnamelen = wcslen(varname);
// for(wchar_t** env = __winitenv; env && *env; ++env){
// wchar_t* cur = *env;
// if(wcsncmp(cur, varname, varnamelen) == 0 && cur[varnamelen] == L'='){
// wchar_t* value = cur + varnamelen + 1;
// size_t value_len = wcslen(value);
// *buffer = (wchar_t*)malloc((value_len + 1) * sizeof(wchar_t));
// if(!*buffer) return -1;
// wscspy(*buffer, value); // y u no work
// if(numberOfElements) *numberOfElements = value_len + 1;
// return 0;
// }
// }
return 0;
}
void WIN_ENTRY free(void* ptr){
std::free(ptr);
}
}
@ -173,6 +211,9 @@ static void *resolveByName(const char *name) {
if (strcmp(name, "_controlfp_s") == 0) return (void *)msvcrt::_controlfp_s;
if (strcmp(name, "_onexit") == 0) return (void*)msvcrt::_onexit;
if (strcmp(name, "__wgetmainargs") == 0) return (void*)msvcrt::__wgetmainargs;
if (strcmp(name, "setlocale") == 0) return (void*)msvcrt::setlocale;
if (strcmp(name, "_wdupenv_s") == 0) return (void*)msvcrt::_wdupenv_s;
if (strcmp(name, "free") == 0) return (void*)msvcrt::free;
return nullptr;
}