// // __acrt_GetStringTypeA from 0x18013d72c to 0x18013d8b9 (397 bytes) // // 4 xrefs: // > _isctype_l @ 0x180136c40 // > setSBUpLow @ 0x18013a47a // > @ 0x180203ad0 // > @ 0x180203adc // // 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 // __int64 __fastcall _acrt_GetStringTypeA( struct __crt_locale_pointers *a1, DWORD dwInfoType, const CHAR *a3, int a4, LPWORD lpCharType, UINT a6, int a7) { UINT v10; // edi int v11; // eax __int64 v12; // r14 unsigned int StringTypeW; // edi size_t v14; // rcx __int64 v15; // rax void *v16; // rsp _QWORD *v17; // rbx _DWORD *v18; // rax int v19; // eax __int64 v21; // [rsp+0h] [rbp-30h] BYREF _QWORD v22[3]; // [rsp+30h] [rbp+0h] BYREF char v23; // [rsp+48h] [rbp+18h] _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)v22, a1); v10 = a6; if ( !a6 ) v10 = *(_DWORD *)(v22[1] + 12LL); v11 = _acrt_MultiByteToWideChar(v10, a7 != 0 ? 9 : 1, a3, a4, nullptr, 0); v12 = v11; if ( !v11 ) { StringTypeW = 0; goto LABEL_22; } v14 = (2LL * v11 + 16) & -(__int64)(2LL * v11 < (unsigned __int64)(2LL * v11 + 16)); if ( !v14 ) { v17 = nullptr; goto LABEL_15; } if ( v14 <= 0x400 ) { v15 = v14 + 15; if ( v14 + 15 < v14 ) v15 = 0xFFFFFFFFFFFFFF0LL; v16 = alloca(v15 & 0xFFFFFFFFFFFFFFF0uLL); v17 = v22; if ( &v21 == (__int64 *)-48LL ) goto LABEL_18; LODWORD(v22[0]) = 52428; goto LABEL_13; } v18 = malloc_base(v14); v17 = v18; if ( v18 ) { *v18 = 56797; LABEL_13: v17 += 2; } LABEL_15: if ( !v17 || (memset(v17, 0, 2 * v12), (v19 = _acrt_MultiByteToWideChar(v10, 1, a3, a4, (WCHAR *)v17, v12)) == 0) ) { LABEL_18: StringTypeW = 0; goto LABEL_19; } StringTypeW = GetStringTypeW(dwInfoType, (LPCWCH)v17, v19, lpCharType); LABEL_19: if ( v17 && *((_DWORD *)v17 - 4) == 56797 ) free_base(v17 - 2); LABEL_22: if ( v23 ) *(_DWORD *)(v22[0] + 936LL) &= ~2u; return StringTypeW; }