// // _wctomb_s_l from 0x180137424 to 0x1801375c0 (412 bytes) // // 4 xrefs: // > unknown_libname_47 @ 0x18012e370 // > unknown_libname_56 @ 0x18012edc1 // > wctomb_s @ 0x1801375ca // > @ 0x1802035d8 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // errno_t __cdecl wctomb_s_l(int *SizeConverted, char *MbCh, size_t SizeInBytes, wchar_t WCh, _locale_t Locale) { errno_t v9; // ebx struct _Mbstatet *v10; // r9 UINT v11; // ecx int v12; // eax int v13; // eax __int64 v14; // [rsp+40h] [rbp-20h] BYREF __int64 v15; // [rsp+48h] [rbp-18h] char v16; // [rsp+58h] [rbp-8h] __int64 v17; // [rsp+88h] [rbp+28h] BYREF WCHAR v18; // [rsp+98h] [rbp+38h] BYREF v18 = WCh; if ( MbCh || !SizeInBytes ) { if ( SizeConverted ) *SizeConverted = -1; if ( SizeInBytes > 0x7FFFFFFF ) { v9 = 22; *errno() = 22; invalid_parameter_noinfo(); return v9; } _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)&v14, Locale); v11 = *(_DWORD *)(v15 + 12); if ( v11 == 65001 ) { v17 = 0; v12 = __crt_mbstring::__c32rtomb_utf8((__crt_mbstring *)MbCh, (char *)v18, (char32_t)&v17, v10); if ( SizeConverted ) *SizeConverted = v12; if ( v12 > 4 ) { v9 = *errno(); goto LABEL_21; } goto LABEL_33; } if ( !*(_QWORD *)(v15 + 312) ) { if ( v18 > 0xFFu ) { if ( MbCh && SizeInBytes ) memset(MbCh, 0, SizeInBytes); goto LABEL_20; } if ( !MbCh ) goto LABEL_27; if ( SizeInBytes ) { *MbCh = v18; LABEL_27: if ( SizeConverted ) *SizeConverted = 1; LABEL_33: v9 = 0; goto LABEL_21; } LABEL_38: v9 = 34; *errno() = 34; invalid_parameter_noinfo(); LABEL_21: if ( v16 ) *(_DWORD *)(v14 + 936) &= ~2u; return v9; } LODWORD(v17) = 0; v13 = _acrt_WideCharToMultiByte(v11, 0, &v18, 1, MbCh, SizeInBytes, nullptr, (BOOL *)&v17); if ( v13 ) { if ( !(_DWORD)v17 ) { if ( SizeConverted ) *SizeConverted = v13; goto LABEL_33; } } else if ( GetLastError() == 122 ) { if ( MbCh && SizeInBytes ) memset(MbCh, 0, SizeInBytes); goto LABEL_38; } LABEL_20: v9 = 42; *errno() = 42; goto LABEL_21; } if ( SizeConverted ) *SizeConverted = 0; return 0; }