L L4D2node

ParseSteamInfFile

0x0017cc80 · 715 bytes · __regparm3

_ZL17ParseSteamInfFilePKcRj.constprop.40

Decompiled

undefined (2 params)

/* ParseSteamInfFile(char const*, unsigned int&) [clone .constprop.40] */

bool __regparm3 ParseSteamInfFile(char *param_1,uint *param_2)

{
  undefined4 *puVar1;
  code *pcVar2;
  int iVar3;
  char *pcVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  undefined4 uVar8;
  long lVar9;
  int *piVar10;
  int in_GS_OFFSET;
  bool bVar11;
  undefined4 uStack_70;
  int local_6c;
  char *local_68 [2];
  int local_60 [4];
  int local_50 [4];
  undefined1 local_40 [32];
  int local_20;
  
  piVar10 = &local_6c;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_6c = g_pFileSystem + 4;
  local_60[0] = 0;
  local_68[1] = "r";
  local_68[0] = "steam.inf";
  uStack_70 = 0x17ccbf;
  pcVar4 = (char *)(**(code **)(*(int *)(g_pFileSystem + 4) + 8))();
  bVar11 = false;
  if (pcVar4 == (char *)0x0) {
LAB_0017cde6:
    if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
      *(undefined **)((int)piVar10 + -4) = &UNK_0017cf4e;
      __stack_chk_fail();
    }
    return bVar11;
  }
  local_6c = g_pFileSystem + 4;
  uStack_70 = 0x17cce0;
  local_68[0] = pcVar4;
  iVar5 = (**(code **)(*(int *)(g_pFileSystem + 4) + 0x18))();
  iVar3 = -((iVar5 + 0x10U & 0xfffffff0) + 0x10);
  piVar10 = (int *)((int)&local_6c + iVar3);
  iVar6 = (int)local_50 + iVar3;
  puVar1 = *(undefined4 **)(g_pFileSystem + 4);
  *(char **)((int)local_60 + iVar3) = pcVar4;
  *(int *)((int)&local_6c + iVar3) = g_pFileSystem + 4;
  *(int *)((int)local_60 + iVar3 + -4) = iVar5;
  *(int *)((int)local_68 + iVar3) = iVar6;
  pcVar2 = (code *)*puVar1;
  *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd0f;
  local_50[0] = (*pcVar2)();
  iVar5 = *(int *)(g_pFileSystem + 4);
  *(char **)((int)local_68 + iVar3) = pcVar4;
  *(int *)((int)&local_6c + iVar3) = g_pFileSystem + 4;
  pcVar2 = *(code **)(iVar5 + 0xc);
  *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd2a;
  (*pcVar2)();
  *(undefined1 *)(iVar6 + local_50[0]) = 0;
  iVar5 = 0;
LAB_0017cd38:
  *(int *)((int)&local_6c + iVar3) = iVar6;
  *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd40;
  iVar6 = COM_Parse(*(char **)((int)&local_6c + iVar3));
  do {
    if (iVar6 == 0) {
LAB_0017cde0:
      bVar11 = iVar5 == 4;
      goto LAB_0017cde6;
    }
    *(undefined1 **)((int)&local_6c + iVar3) = &com_token;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd56;
    iVar7 = _V_strlen(*(char **)((int)&local_6c + iVar3));
    if ((iVar7 < 1) || (3 < iVar5)) goto LAB_0017cde0;
    *(char **)((int)&local_6c + iVar3) = "PatchVersion=";
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd6f;
    uVar8 = _V_strlen(*(char **)((int)&local_6c + iVar3));
    *(char **)((int)local_68 + iVar3) = "PatchVersion=";
    *(undefined4 *)((int)local_60 + iVar3 + -4) = uVar8;
    *(undefined1 **)((int)&local_6c + iVar3) = &com_token;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd87;
    iVar7 = V_strnicmp(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
                       *(int *)((int)local_60 + iVar3 + -4));
    if (iVar7 != 0) break;
    *(char **)((int)&local_6c + iVar3) = "PatchVersion=";
    iVar5 = iVar5 + 1;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cd9a;
    iVar7 = _V_strlen(*(char **)((int)&local_6c + iVar3));
    *(undefined4 *)((int)local_60 + iVar3 + -4) = 0x1f;
    *(undefined1 **)((int)&local_6c + iVar3) = spszVersionString;
    *(undefined1 **)((int)local_68 + iVar3) = &com_token + iVar7;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cdb7;
    V_strncpy(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
              *(int *)((int)local_60 + iVar3 + -4));
    spszVersionString[0x1f] = 0;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cdc8;
    sHostVersion = VerToInt(spszVersionString);
    *(int *)((int)&local_6c + iVar3) = iVar6;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cdd5;
    iVar6 = COM_Parse(*(char **)((int)&local_6c + iVar3));
  } while( true );
  *(char **)((int)&local_6c + iVar3) = "NetworkVersion=";
  *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce0c;
  uVar8 = _V_strlen(*(char **)((int)&local_6c + iVar3));
  *(char **)((int)local_68 + iVar3) = "NetworkVersion=";
  *(undefined4 *)((int)local_60 + iVar3 + -4) = uVar8;
  *(undefined1 **)((int)&local_6c + iVar3) = &com_token;
  *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce24;
  iVar7 = V_strnicmp(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
                     *(int *)((int)local_60 + iVar3 + -4));
  if (iVar7 == 0) {
    *(char **)((int)&local_6c + iVar3) = "NetworkVersion=";
    iVar5 = iVar5 + 1;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce37;
    iVar7 = _V_strlen(*(char **)((int)&local_6c + iVar3));
    *(undefined4 *)((int)local_60 + iVar3 + -4) = 0x1f;
    *(undefined1 **)((int)&local_6c + iVar3) = spszNetworkVersionString;
    *(undefined1 **)((int)local_68 + iVar3) = &com_token + iVar7;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce54;
    V_strncpy(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
              *(int *)((int)local_60 + iVar3 + -4));
    spszNetworkVersionString[0x1f] = 0;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce65;
    sNetworkVersion = VerToInt(spszNetworkVersionString);
  }
  else {
    *(char **)((int)&local_6c + iVar3) = "ProductName=";
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce7c;
    uVar8 = _V_strlen(*(char **)((int)&local_6c + iVar3));
    *(char **)((int)local_68 + iVar3) = "ProductName=";
    *(undefined4 *)((int)local_60 + iVar3 + -4) = uVar8;
    *(undefined1 **)((int)&local_6c + iVar3) = &com_token;
    *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17ce94;
    iVar7 = V_strnicmp(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
                       *(int *)((int)local_60 + iVar3 + -4));
    if (iVar7 == 0) {
      *(char **)((int)&local_6c + iVar3) = "ProductName=";
      iVar5 = iVar5 + 1;
      *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cea7;
      iVar7 = _V_strlen(*(char **)((int)&local_6c + iVar3));
      *(undefined4 *)((int)local_60 + iVar3 + -4) = 0x1f;
      *(undefined1 **)((int)&local_6c + iVar3) = spszProductString;
      *(undefined1 **)((int)local_68 + iVar3) = &com_token + iVar7;
      *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cec4;
      V_strncpy(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
                *(int *)((int)local_60 + iVar3 + -4));
      spszProductString[0x1f] = 0;
    }
    else {
      *(char **)((int)&local_6c + iVar3) = "AppID=";
      *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cedc;
      uVar8 = _V_strlen(*(char **)((int)&local_6c + iVar3));
      *(char **)((int)local_68 + iVar3) = "AppID=";
      *(undefined4 *)((int)local_60 + iVar3 + -4) = uVar8;
      *(undefined1 **)((int)&local_6c + iVar3) = &com_token;
      *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cef4;
      iVar7 = V_strnicmp(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
                         *(int *)((int)local_60 + iVar3 + -4));
      if (iVar7 == 0) {
        *(char **)((int)&local_6c + iVar3) = "AppID=";
        iVar5 = iVar5 + 1;
        *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cf0b;
        iVar7 = _V_strlen(*(char **)((int)&local_6c + iVar3));
        *(undefined4 *)((int)local_60 + iVar3 + -4) = 0x1f;
        *(undefined1 **)((int)local_68 + iVar3) = &com_token + iVar7;
        *(undefined1 **)((int)&local_6c + iVar3) = local_40;
        *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cf27;
        V_strncpy(*(char **)((int)&local_6c + iVar3),*(char **)((int)local_68 + iVar3),
                  *(int *)((int)local_60 + iVar3 + -4));
        *(undefined4 *)((int)local_60 + iVar3 + -4) = 10;
        *(undefined4 *)((int)local_68 + iVar3) = 0;
        *(undefined1 **)((int)&local_6c + iVar3) = local_40;
        *(undefined4 *)((int)&uStack_70 + iVar3) = 0x17cf42;
        lVar9 = strtol(*(char **)((int)&local_6c + iVar3),*(char ***)((int)local_68 + iVar3),
                       *(int *)((int)local_60 + iVar3 + -4));
        *(long *)param_1 = lVar9;
      }
    }
  }
  goto LAB_0017cd38;
}

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)