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) {