L L4D2node

CUtlBuffer::ConvertCRLF

0x00b80a70 · 976 bytes · __thiscall

_ZN10CUtlBuffer11ConvertCRLFERS_

Decompiled

undefined (2 params)

/* CUtlBuffer::ConvertCRLF(CUtlBuffer&) */

undefined4 __thiscall CUtlBuffer::ConvertCRLF(CUtlBuffer *this,CUtlBuffer *param_1)

{
  char *pcVar1;
  CUtlBuffer CVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  CUtlBuffer *pCVar14;
  int local_34;
  int local_30;
  
  if (((((byte)this[0x15] & 1) == 0) || (((byte)param_1[0x15] & 1) == 0)) ||
     ((((byte)this[0x15] & 5) == 5) == (((byte)param_1[0x15] & 5) == 5))) {
    return 0;
  }
  iVar3 = *(int *)(this + 0x1c);
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined4 *)(param_1 + 0x10) = 0;
  *(undefined4 *)(param_1 + 0x20) = 0;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  param_1[0x14] = (CUtlBuffer)0x0;
  CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)param_1);
  EnsureCapacity(param_1,iVar3);
  CVar2 = this[0x15];
  iVar4 = *(int *)(this + 0xc);
  iVar5 = *(int *)(this + 0x10);
  iVar6 = *(int *)this;
  if (iVar3 < 1) {
    local_34 = 0;
    local_30 = 0;
  }
  else {
    local_34 = 0;
    local_30 = 0;
    iVar13 = 0;
    do {
      pcVar1 = (char *)(iVar6 + iVar13);
      iVar9 = iVar3 - iVar13;
      if (((byte)CVar2 & 5) == 5) {
        iVar10 = V_strnistr(pcVar1,"\r\n",iVar9);
        if (iVar10 == 0) {
LAB_00b80e20:
          Put(param_1,pcVar1,iVar9);
          break;
        }
        Put(param_1,pcVar1,iVar10 - (int)pcVar1);
        if (((((byte)param_1[0x15] & 1) != 0) && (*(int *)(param_1 + 0x10) != 0)) &&
           (*(char *)(*(int *)param_1 + ((*(int *)(param_1 + 0x10) + -1) - *(int *)(param_1 + 0x20))
                     ) == '\n')) {
          iVar9 = 0;
          if (((byte)param_1[0x15] & 0x10) == 0) {
            iVar9 = *(int *)(param_1 + 0x18);
          }
LAB_00b80ba0:
          iVar9 = iVar9 + -1;
          if (-1 < iVar9) {
            while (pCVar14 = param_1, cVar8 = CheckPut(param_1,1), cVar8 != '\0') {
              *(undefined1 *)
               (*(int *)param_1 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x20))) = 9;
              iVar7 = *(int *)(param_1 + 0x10);
              *(int *)(param_1 + 0x10) = iVar7 + 1;
              if (iVar7 + 1 <= *(int *)(param_1 + 0x1c)) break;
              AddNullTermination(pCVar14);
              iVar9 = iVar9 + -1;
              if (iVar9 < 0) goto LAB_00b80be0;
            }
            goto LAB_00b80ba0;
          }
        }
LAB_00b80be0:
        pCVar14 = param_1;
        cVar8 = CheckPut(param_1,1);
        if (cVar8 != '\0') {
          *(undefined1 *)(*(int *)param_1 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x20))) =
               10;
          iVar9 = *(int *)(param_1 + 0x10);
          *(int *)(param_1 + 0x10) = iVar9 + 1;
          if (*(int *)(param_1 + 0x1c) < iVar9 + 1) {
            AddNullTermination(pCVar14);
          }
        }
        iVar13 = (iVar10 - (int)pcVar1) + 2 + iVar13;
        uVar11 = -(uint)(iVar13 + -1 <= iVar4);
        uVar12 = -(uint)(iVar13 + -1 <= iVar5);
      }
      else {
        iVar10 = V_strnchr(pcVar1,'\n',iVar9);
        if (iVar10 == 0) goto LAB_00b80e20;
        Put(param_1,pcVar1,iVar10 - (int)pcVar1);
        if (((((byte)param_1[0x15] & 1) != 0) && (*(int *)(param_1 + 0x10) != 0)) &&
           (*(char *)(*(int *)param_1 + ((*(int *)(param_1 + 0x10) + -1) - *(int *)(param_1 + 0x20))
                     ) == '\n')) {
          iVar9 = 0;
          if (((byte)param_1[0x15] & 0x10) == 0) {
            iVar9 = *(int *)(param_1 + 0x18);
          }
LAB_00b80cd8:
          iVar9 = iVar9 + -1;
          if (-1 < iVar9) {
            while (pCVar14 = param_1, cVar8 = CheckPut(param_1,1), cVar8 != '\0') {
              *(undefined1 *)
               (*(int *)param_1 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x20))) = 9;
              iVar7 = *(int *)(param_1 + 0x10);
              *(int *)(param_1 + 0x10) = iVar7 + 1;
              if (iVar7 + 1 <= *(int *)(param_1 + 0x1c)) break;
              AddNullTermination(pCVar14);
              iVar9 = iVar9 + -1;
              if (iVar9 < 0) goto LAB_00b80d20;
            }
            goto LAB_00b80cd8;
          }
        }
LAB_00b80d20:
        pCVar14 = param_1;
        cVar8 = CheckPut(param_1,1);
        if (cVar8 != '\0') {
          *(undefined1 *)(*(int *)param_1 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x20))) =
               0xd;
          iVar9 = *(int *)(param_1 + 0x10);
          *(int *)(param_1 + 0x10) = iVar9 + 1;
          if (*(int *)(param_1 + 0x1c) < iVar9 + 1) {
            AddNullTermination(pCVar14);
          }
        }
        if (((((byte)param_1[0x15] & 1) != 0) && (*(int *)(param_1 + 0x10) != 0)) &&
           (*(char *)(*(int *)param_1 + ((*(int *)(param_1 + 0x10) + -1) - *(int *)(param_1 + 0x20))
                     ) == '\n')) {
          iVar9 = 0;
          if (((byte)param_1[0x15] & 0x10) == 0) {
            iVar9 = *(int *)(param_1 + 0x18);
          }
LAB_00b80d80:
          iVar9 = iVar9 + -1;
          if (-1 < iVar9) {
            while (pCVar14 = param_1, cVar8 = CheckPut(param_1,1), cVar8 != '\0') {
              *(undefined1 *)
               (*(int *)param_1 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x20))) = 9;
              iVar7 = *(int *)(param_1 + 0x10);
              *(int *)(param_1 + 0x10) = iVar7 + 1;
              if (iVar7 + 1 <= *(int *)(param_1 + 0x1c)) break;
              AddNullTermination(pCVar14);
              iVar9 = iVar9 + -1;
              if (iVar9 < 0) goto LAB_00b80dc0;
            }
            goto LAB_00b80d80;
          }
        }
LAB_00b80dc0:
        pCVar14 = param_1;
        cVar8 = CheckPut(param_1,1);
        if (cVar8 != '\0') {
          *(undefined1 *)(*(int *)param_1 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x20))) =
               10;
          iVar9 = *(int *)(param_1 + 0x10);
          *(int *)(param_1 + 0x10) = iVar9 + 1;
          if (*(int *)(param_1 + 0x1c) < iVar9 + 1) {
            AddNullTermination(pCVar14);
          }
        }
        iVar13 = (iVar10 - (int)pcVar1) + 1 + iVar13;
        uVar11 = (uint)(iVar13 <= iVar4);
        uVar12 = (uint)(iVar13 <= iVar5);
      }
      local_30 = local_30 + uVar11;
      local_34 = local_34 + uVar12;
    } while (iVar13 < iVar3);
  }
  SeekGet(param_1,0,local_30 + iVar4);
  SeekPut(param_1,0,local_34 + iVar5);
  return 1;
}

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)