L L4D2node

CRC32_ProcessBuffer

0x002452a0 · 480 bytes · __cdecl

_Z19CRC32_ProcessBufferPmPKvi

Decompiled

undefined (3 params)

/* CRC32_ProcessBuffer(unsigned long*, void const*, int) */

void CRC32_ProcessBuffer(ulong *param_1,void *param_2,int param_3)

{
  uint uVar1;
  byte bVar2;
  int iVar3;
  uint *puVar4;
  uint uVar5;
  int iVar6;
  uint *local_18;
  
  uVar1 = *param_1;
LAB_002452b4:
  bVar2 = (byte)uVar1;
  puVar4 = param_2;
  switch(param_3) {
  case 0:
    goto switchD_002452bd_caseD_0;
  case 3:
    puVar4 = (uint *)((int)param_2 + 1);
    uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uint)(byte)(bVar2 ^ (byte)*(uint *)param_2) * 4);
  case 2:
    param_2 = (void *)((int)puVar4 + 1);
    uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uint)(byte)((byte)uVar1 ^ (byte)*puVar4) * 4);
  case 1:
    uVar1 = uVar1 >> 8 ^
            *(uint *)(&pulCRCTable + (uint)(byte)((byte)uVar1 ^ (byte)*(uint *)param_2) * 4);
    goto switchD_002452bd_caseD_0;
  case 4:
    break;
  case 7:
    puVar4 = (uint *)((int)param_2 + 1);
    uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uint)(byte)(bVar2 ^ (byte)*(uint *)param_2) * 4);
  case 6:
    param_2 = (void *)((int)puVar4 + 1);
    uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uint)(byte)((byte)uVar1 ^ (byte)*puVar4) * 4);
  case 5:
    uVar5 = *(uint *)param_2;
    param_2 = (void *)((int)param_2 + 1);
    uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uint)(byte)((byte)uVar1 ^ (byte)uVar5) * 4);
    break;
  default:
    uVar5 = (uint)param_2 & 3;
    puVar4 = param_2;
    if (uVar5 == 2) {
LAB_002453d5:
      param_2 = (void *)((int)puVar4 + 1);
      uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uint)(byte)((byte)uVar1 ^ (byte)*puVar4) * 4);
LAB_002453e9:
      local_18 = (uint *)((int)param_2 + 1);
      uVar1 = uVar1 >> 8 ^
              *(uint *)(&pulCRCTable + (uint)(byte)((byte)uVar1 ^ (byte)*(uint *)param_2) * 4);
    }
    else {
      if (uVar5 == 3) {
        puVar4 = (uint *)((int)param_2 + 1);
        uVar1 = uVar1 >> 8 ^
                *(uint *)(&pulCRCTable + (uint)(byte)(bVar2 ^ (byte)*(uint *)param_2) * 4);
        goto LAB_002453d5;
      }
      local_18 = param_2;
      if (uVar5 == 1) goto LAB_002453e9;
    }
    iVar6 = (int)(param_3 - uVar5) >> 3;
    iVar3 = iVar6 + -1;
    puVar4 = local_18;
    if (iVar6 != 0) {
      do {
        iVar3 = iVar3 + -1;
        uVar1 = (uVar1 ^ *puVar4) >> 8 ^ *(uint *)(&pulCRCTable + ((uVar1 ^ *puVar4) & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ puVar4[1] ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
        puVar4 = puVar4 + 2;
      } while (iVar3 != -1);
      local_18 = local_18 + iVar6 * 2;
    }
    param_3 = param_3 - uVar5 & 7;
    param_2 = local_18;
    goto LAB_002452b4;
  }
  uVar1 = (uVar1 ^ *(uint *)param_2) >> 8 ^
          *(uint *)(&pulCRCTable + ((uVar1 ^ *(uint *)param_2) & 0xff) * 4);
  uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
  uVar1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
  *param_1 = uVar1 >> 8 ^ *(uint *)(&pulCRCTable + (uVar1 & 0xff) * 4);
  return;
switchD_002452bd_caseD_0:
  *param_1 = uVar1;
  return;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)