// 0011aa34 std::Catalogs::_M_erase /* std::Catalogs::_M_erase(int) [clone .cold] */ void std::Catalogs::_M_erase(int param_1) { undefined8 *puVar1; puVar1 = (undefined8 *)__cxa_allocate_exception(8); *puVar1 = &__gnu_cxx::__concurrence_unlock_error::vftable; /* WARNING: Subroutine does not return */ __cxa_throw(puVar1,&__gnu_cxx::__concurrence_unlock_error::typeinfo, __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); } // 0011ab0c std::Catalogs::_M_add /* std::Catalogs::_M_add(char const*, std::locale) [clone .cold] */ void std::Catalogs::_M_add(__concurrence_lock_error *param_1) { void *unaff_RBP; locale *unaff_R13; __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error(param_1); free(*(void **)((long)unaff_RBP + 8)); locale::~locale(unaff_R13); operator_delete(unaff_RBP); __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error ((__concurrence_unlock_error *)&stack0x00000000); /* WARNING: Subroutine does not return */ _Unwind_Resume(); } // 001aaf20 std::Catalogs::~Catalogs /* std::Catalogs::~Catalogs() */ void __thiscall std::Catalogs::~Catalogs(Catalogs *this) { void *pvVar1; undefined8 *puVar2; undefined8 *puVar3; puVar2 = *(undefined8 **)(this + 0x30); puVar3 = *(undefined8 **)(this + 0x38); if (puVar2 != puVar3) { do { pvVar1 = (void *)*puVar2; if (pvVar1 != (void *)0x0) { free(*(void **)((long)pvVar1 + 8)); locale::~locale((locale *)((long)pvVar1 + 0x10)); operator_delete(pvVar1); } puVar2 = puVar2 + 1; } while (*(undefined8 **)(this + 0x38) != puVar2); puVar3 = *(undefined8 **)(this + 0x30); } if (puVar3 != (undefined8 *)0x0) { operator_delete(puVar3); return; } return; } // 001ab280 std::Catalogs::_M_erase /* std::Catalogs::_M_erase(int) */ void __thiscall std::Catalogs::_M_erase(Catalogs *this,int param_1) { int *piVar1; int iVar2; undefined8 *puVar3; long lVar4; long lVar5; undefined8 *__src; Catalogs *this_00; this_00 = this; iVar2 = pthread_mutex_lock((pthread_mutex_t *)this); if (iVar2 == 0) { puVar3 = *(undefined8 **)(this + 0x30); lVar4 = (long)*(undefined8 **)(this + 0x38) - (long)puVar3 >> 3; while (lVar5 = lVar4, 0 < lVar4) { while( true ) { lVar4 = lVar5 >> 1; if (param_1 <= *(int *)puVar3[lVar4]) break; puVar3 = puVar3 + lVar4 + 1; lVar5 = (lVar5 - lVar4) + -1; if (lVar5 < 1) goto LAB_001ab2e8; } } LAB_001ab2e8: if ((puVar3 != *(undefined8 **)(this + 0x38)) && (piVar1 = (int *)*puVar3, *piVar1 == param_1)) { free(*(void **)(piVar1 + 2)); locale::~locale((locale *)(piVar1 + 4)); operator_delete(piVar1); __src = puVar3 + 1; if (*(undefined8 **)(this + 0x38) != __src) { memmove(puVar3,__src,(long)*(undefined8 **)(this + 0x38) - (long)__src); __src = *(undefined8 **)(this + 0x38); } *(undefined8 **)(this + 0x38) = __src + -1; if (*(int *)(this + 0x28) + -1 == param_1) { *(int *)(this + 0x28) = param_1; } iVar2 = pthread_mutex_unlock((pthread_mutex_t *)this); if (iVar2 == 0) { return; } puVar3 = (undefined8 *)__cxa_allocate_exception(8); *puVar3 = &__gnu_cxx::__concurrence_unlock_error::vftable; /* WARNING: Subroutine does not return */ __cxa_throw(puVar3,&__gnu_cxx::__concurrence_unlock_error::typeinfo, __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); } iVar2 = pthread_mutex_unlock((pthread_mutex_t *)this); if (iVar2 == 0) { return; } } else { __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error ((__concurrence_lock_error *)this_00); } puVar3 = (undefined8 *)__cxa_allocate_exception(8); *puVar3 = &__gnu_cxx::__concurrence_unlock_error::vftable; /* WARNING: Subroutine does not return */ __cxa_throw(puVar3,&__gnu_cxx::__concurrence_unlock_error::typeinfo, __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); } // 001ab3a0 std::Catalogs::_M_get /* std::Catalogs::_M_get(int) const */ int * __thiscall std::Catalogs::_M_get(Catalogs *this,int param_1) { int iVar1; undefined8 *puVar2; undefined8 extraout_RAX; long lVar3; long lVar4; long extraout_RDX; Catalogs *this_00; int *piVar5; this_00 = this; iVar1 = pthread_mutex_lock((pthread_mutex_t *)this); if (iVar1 != 0) { __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error ((__concurrence_lock_error *)this_00); if (extraout_RDX == -1) { /* WARNING: Subroutine does not return */ __cxa_call_unexpected(); } /* WARNING: Subroutine does not return */ _Unwind_Resume(extraout_RAX); } puVar2 = *(undefined8 **)(this + 0x30); lVar3 = (long)*(undefined8 **)(this + 0x38) - (long)puVar2 >> 3; while (lVar4 = lVar3, 0 < lVar3) { while( true ) { lVar3 = lVar4 >> 1; if (param_1 <= *(int *)puVar2[lVar3]) break; puVar2 = puVar2 + lVar3 + 1; lVar4 = (lVar4 - lVar3) + -1; if (lVar4 < 1) goto LAB_001ab407; } } LAB_001ab407: if (*(undefined8 **)(this + 0x38) == puVar2) { piVar5 = (int *)0x0; } else { piVar5 = (int *)*puVar2; if (*piVar5 != param_1) { piVar5 = (int *)0x0; } } iVar1 = pthread_mutex_unlock((pthread_mutex_t *)this); if (iVar1 != 0) { puVar2 = (undefined8 *)__cxa_allocate_exception(8); *puVar2 = &__gnu_cxx::__concurrence_unlock_error::vftable; /* WARNING: Subroutine does not return */ __cxa_throw(puVar2,&__gnu_cxx::__concurrence_unlock_error::typeinfo, __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); } return piVar5; }