204 lines
5.8 KiB
C
204 lines
5.8 KiB
C
// 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;
|
|
}
|
|
|
|
|