diff --git a/dll/msvcrt.cpp b/dll/msvcrt.cpp index ba67a2c..d6f4ff8 100644 --- a/dll/msvcrt.cpp +++ b/dll/msvcrt.cpp @@ -138,10 +138,13 @@ namespace msvcrt { size_t varnamelen = wstrlen(varname); + DEBUG_LOG("\tSearching env vars...\n"); for(uint16_t** env = __winitenv; env && *env; ++env){ uint16_t* cur = *env; std::string cur_str = wideStringToString(cur); + DEBUG_LOG("\tCur env var: %s\n", cur_str.c_str()); if(wstrncmp(cur, varname, varnamelen) == 0 && cur[varnamelen] == L'='){ + DEBUG_LOG("Found the env var %s!\n", var_str.c_str()); uint16_t* value = cur + varnamelen + 1; size_t value_len = wstrlen(value); @@ -156,6 +159,7 @@ namespace msvcrt { } } + DEBUG_LOG("Could not find env var %s\n", var_str.c_str()); return 0; } diff --git a/strutil.cpp b/strutil.cpp index 5aaff44..24b00ff 100644 --- a/strutil.cpp +++ b/strutil.cpp @@ -5,8 +5,11 @@ #include #include #include +#include size_t wstrlen(const uint16_t *str) { + if(!str) return 0; + size_t len = 0; while (str[len] != 0) ++len; @@ -126,13 +129,23 @@ std::string wideStringToString(const uint16_t *src, int len = -1) { // the old implementation std::string res(len, '\0'); + std::string debug_wstr; + std::stringstream ss; + bool is_wide = false; for (int i = 0; i < len; i++) { + ss << "0x" << std::hex << src[i] << " "; + // debug_wstr += std::format("0x%X ", src[i]); if(src[i] > 255){ - // DEBUG_LOG("Encountered wide char with value 0x%X!\n", src[i]); - // assert(src[i] <= 255); + // DEBUG_LOG("Encountered wide char with value 0x%X!\n", src[i]); + // assert(src[i] <= 255); + is_wide = true; } res[i] = src[i] & 0xFF; } + if(is_wide){ + debug_wstr += ss.str(); + DEBUG_LOG("wideString (%d): %s\n", wstrlen(src), debug_wstr.c_str()); + } return res; }