server-re/decomp/MessageServer_Release_x64/full/functions/0x140064d80.c

51 lines
1.5 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x140064d80 FUN_140064d80
* Pseudocode, not original source. */
longlong * FUN_140064d80(longlong *param_1,longlong *param_2)
{
void *_Src;
void *_Dst;
void *pvVar1;
undefined8 uVar2;
ulonglong uVar3;
size_t _Size;
ulonglong uVar4;
if (param_1 != param_2) {
pvVar1 = (void *)*param_2;
uVar3 = param_2[1] - (longlong)pvVar1 >> 2;
if (uVar3 == 0) {
FUN_140064c70(param_1);
return param_1;
}
_Dst = (void *)*param_1;
uVar4 = param_1[1] - (longlong)_Dst >> 2;
if (uVar3 <= uVar4) {
memmove(_Dst,pvVar1,param_2[1] - (longlong)pvVar1 & 0xfffffffffffffffc);
param_1[1] = *param_1 + (param_2[1] - *param_2 >> 2) * 4;
return param_1;
}
if ((ulonglong)(param_1[2] - (longlong)_Dst >> 2) < uVar3) {
if (_Dst != (void *)0x0) {
operator_delete(_Dst);
}
uVar2 = FUN_140064d10(param_1,param_2[1] - *param_2 >> 2);
if ((char)uVar2 == '\0') {
return param_1;
}
_Size = (param_2[1] - *param_2 >> 2) * 4;
pvVar1 = memmove((void *)*param_1,(void *)*param_2,_Size);
}
else {
_Src = (void *)((longlong)pvVar1 + uVar4 * 4);
FUN_140064cd0(pvVar1,(longlong)_Src,_Dst);
_Size = (param_2[1] - (longlong)_Src >> 2) * 4;
pvVar1 = memmove((void *)param_1[1],_Src,_Size);
}
param_1[1] = (longlong)pvVar1 + _Size;
}
return param_1;
}