From b18248b5f2d32543ab700905762d28a5e11fedb0 Mon Sep 17 00:00:00 2001 From: a1batross Date: Mon, 11 Mar 2024 01:56:17 +0100 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20ed=5Fparseedict.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ed_parseedict.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/ed_parseedict.c b/ed_parseedict.c index a801c17..5ef3a8a 100644 --- a/ed_parseedict.c +++ b/ed_parseedict.c @@ -1,5 +1,50 @@ // this isn't a compilable code // provided just for reference +// don't believe Ghidra output + +bool __regparm3 SuckOutClassname(char *szInputStream,edict_t *pEdict) + +{ + int iVar1; + bool bVar2; + int iVar3; + char *data; + int in_GS_OFFSET; + KeyValueData kvd; + bool szKeyName [256]; + + iVar1 = *(int *)(in_GS_OFFSET + 0x14); + kvd.szClassName = (char *)0x0; + kvd.szValue = ""; + kvd.fHandled = 0; + kvd.szKeyName = szKeyName; + do { + data = COM_Parse(szInputStream); + if ((data == (char *)0x0) || (com_token[0] == '}')) { + bVar2 = false; + goto LAB_000d4d0f; + } + Q_strncpy(szKeyName,com_token,0xff); + szKeyName[255] = false; + szInputStream = COM_Parse(data); + if (szInputStream == (char *)0x0) break; + iVar3 = Q_strcmp(szKeyName,"classname"); + } while (iVar3 != 0); + kvd.szValue = com_token; + (*gEntityInterface.pfnKeyValue)(pEdict,&kvd); + if (kvd.fHandled == 0) { + /* WARNING: Subroutine does not return */ + Host_Error("SuckOutClassname: parse error"); + } + bVar2 = true; +LAB_000d4d0f: + if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) { + return bVar2; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + char * ED_ParseEdict(char *data,edict_t *ent) {