X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=prvm_edict.c;h=7c87aa3e99b171236d4e1be613f4a9a55280bac3;hb=8ba97159796cbbab3a88e2230f62adc8d422b5ce;hp=fd4440b8319cb14277c2e827b832dcea37deb71b;hpb=0f50ec2cb291f937ab0a001c9f5bd1e0b367bb74;p=xonotic%2Fdarkplaces.git diff --git a/prvm_edict.c b/prvm_edict.c index fd4440b8..7c87aa3e 100644 --- a/prvm_edict.c +++ b/prvm_edict.c @@ -57,7 +57,7 @@ void PRVM_MEM_Alloc(void) prog->edictprivate_size = max(prog->edictprivate_size,(int)sizeof(prvm_edict_private_t)); // alloc edicts - prog->edicts = Mem_Alloc(prog->progs_mempool,prog->limit_edicts * sizeof(prvm_edict_t)); + prog->edicts = (prvm_edict_t *)Mem_Alloc(prog->progs_mempool,prog->limit_edicts * sizeof(prvm_edict_t)); // alloc edict private space prog->edictprivate = Mem_Alloc(prog->progs_mempool, prog->max_edicts * prog->edictprivate_size); @@ -373,7 +373,7 @@ char *PRVM_ValueString (etype_t type, prvm_eval_t *val) mfunction_t *f; int n; - type &= ~DEF_SAVEGLOBAL; + type = (etype_t)((int) type & ~DEF_SAVEGLOBAL); switch (type) { @@ -433,7 +433,7 @@ char *PRVM_UglyValueString (etype_t type, prvm_eval_t *val) ddef_t *def; mfunction_t *f; - type &= ~DEF_SAVEGLOBAL; + type = (etype_t)((int)type & ~DEF_SAVEGLOBAL); switch (type) { @@ -499,7 +499,7 @@ padded to 20 field width char *PRVM_GlobalString (int ofs) { char *s; - int i; + size_t i; ddef_t *def; void *val; static char line[128]; @@ -510,7 +510,7 @@ char *PRVM_GlobalString (int ofs) sprintf (line,"%i(?)", ofs); else { - s = PRVM_ValueString (def->type, val); + s = PRVM_ValueString ((etype_t)def->type, (prvm_eval_t *)val); sprintf (line,"%i(%s)%s", ofs, PRVM_GetString(def->s_name), s); } @@ -524,7 +524,7 @@ char *PRVM_GlobalString (int ofs) char *PRVM_GlobalStringNoContents (int ofs) { - int i; + size_t i; ddef_t *def; static char line[128]; @@ -554,7 +554,7 @@ For debugging // LordHavoc: changed to print out every 4096 characters (incase there are a lot of fields to print) void PRVM_ED_Print(prvm_edict_t *ed) { - int l; + size_t l; ddef_t *d; int *v; int i, j; @@ -600,7 +600,7 @@ void PRVM_ED_Print(prvm_edict_t *ed) strcat(tempstring, " "); strcat(tempstring, " "); - name = PRVM_ValueString(d->type, (prvm_eval_t *)v); + name = PRVM_ValueString((etype_t)d->type, (prvm_eval_t *)v); if (strlen(name) > 256) { memcpy (tempstring2, name, 256); @@ -661,7 +661,7 @@ void PRVM_ED_Write (qfile_t *f, prvm_edict_t *ed) continue; FS_Printf(f,"\"%s\" ",name); - FS_Printf(f,"\"%s\"\n", PRVM_UglyValueString(d->type, (prvm_eval_t *)v)); + FS_Printf(f,"\"%s\"\n", PRVM_UglyValueString((etype_t)d->type, (prvm_eval_t *)v)); } FS_Print(f, "}\n"); @@ -813,7 +813,7 @@ void PRVM_ED_WriteGlobals (qfile_t *f) name = PRVM_GetString(def->s_name); FS_Printf(f,"\"%s\" ", name); - FS_Printf(f,"\"%s\"\n", PRVM_UglyValueString(type, (prvm_eval_t *)&prog->globals.generic[def->ofs])); + FS_Printf(f,"\"%s\"\n", PRVM_UglyValueString((etype_t)type, (prvm_eval_t *)&prog->globals.generic[def->ofs])); } FS_Print(f,"}\n"); } @@ -883,7 +883,7 @@ qboolean PRVM_ED_ParseEpair(prvm_edict_t *ent, ddef_t *key, const char *s) switch (key->type & ~DEF_SAVEGLOBAL) { case ev_string: - l = strlen(s) + 1; + l = (int)strlen(s) + 1; val->string = PRVM_AllocString(l, &new_p); for (i = 0;i < l;i++) { @@ -927,15 +927,15 @@ qboolean PRVM_ED_ParseEpair(prvm_edict_t *ent, ddef_t *key, const char *s) while (*s && *s <= ' ') s++; i = atoi(s); - if (i < 0 || i >= prog->limit_edicts) - Con_Printf("PRVM_ED_ParseEpair: ev_entity reference too large (edict %i >= MAX_EDICTS %i) on %s\n", i, MAX_EDICTS, PRVM_NAME); + if (i >= prog->limit_edicts) + Con_Printf("PRVM_ED_ParseEpair: ev_entity reference too large (edict %u >= MAX_EDICTS %u) on %s\n", (unsigned int)i, (unsigned int)MAX_EDICTS, PRVM_NAME); while (i >= prog->max_edicts) PRVM_MEM_IncreaseEdicts(); //SV_IncreaseEdicts(); // if SV_IncreaseEdicts was called the base pointer needs to be updated if (ent) val = (prvm_eval_t *)((int *)ent->fields.vp + key->ofs); - val->edict = PRVM_EDICT_TO_PROG(PRVM_EDICT_NUM(i)); + val->edict = PRVM_EDICT_TO_PROG(PRVM_EDICT_NUM((int)i)); break; case ev_field: @@ -1015,7 +1015,7 @@ const char *PRVM_ED_ParseEdict (const char *data, prvm_edict_t *ent) qboolean anglehack; qboolean init; char keyname[256]; - int n; + size_t n; init = false; @@ -1061,6 +1061,10 @@ const char *PRVM_ED_ParseEdict (const char *data, prvm_edict_t *ent) init = true; + // ignore attempts to set key "" (this problem occurs in nehahra neh1m8.bsp) + if (!keyname[0]) + continue; + // keynames with a leading underscore are used for utility comments, // and are immediately discarded by quake if (keyname[0] == '_') @@ -1260,7 +1264,7 @@ void PRVM_LoadLNO( const char *progname ) { (unsigned int)LittleLong( header[ 4 ] ) == (unsigned int)prog->progs->numfielddefs && (unsigned int)LittleLong( header[ 5 ] ) == (unsigned int)prog->progs->numstatements ) { - prog->statement_linenums = Mem_Alloc(prog->progs_mempool, prog->progs->numstatements * sizeof( int ) ); + prog->statement_linenums = (int *)Mem_Alloc(prog->progs_mempool, prog->progs->numstatements * sizeof( int ) ); memcpy( prog->statement_linenums, (int *) lno + 6, prog->progs->numstatements * sizeof( int ) ); } Mem_Free( lno ); @@ -1283,7 +1287,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required } prog->progs = (dprograms_t *)FS_LoadFile (filename, prog->progs_mempool, false); - if (prog->progs == NULL) + if (prog->progs == NULL || fs_filesize < (fs_offset_t)sizeof(dprograms_t)) PRVM_ERROR ("PRVM_LoadProgs: couldn't load %s for %s", filename, PRVM_NAME); Con_DPrintf("%s programs occupy %iK.\n", PRVM_NAME, fs_filesize/1024); @@ -1306,9 +1310,9 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required prog->stringssize = 0; for (i = 0;i < prog->progs->numstrings;i++) { - if (prog->progs->ofs_strings + prog->stringssize >= fs_filesize) + if (prog->progs->ofs_strings + prog->stringssize >= (int)fs_filesize) PRVM_ERROR ("%s: %s strings go past end of file\n", PRVM_NAME, filename); - prog->stringssize += strlen (prog->strings + prog->stringssize) + 1; + prog->stringssize += (int)strlen (prog->strings + prog->stringssize) + 1; } prog->numknownstrings = 0; prog->maxknownstrings = 0; @@ -1321,7 +1325,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required // so allocate a new place for it infielddefs = (ddef_t *)((qbyte *)prog->progs + prog->progs->ofs_fielddefs); // ( + DPFIELDS ) - prog->fielddefs = Mem_Alloc(prog->progs_mempool, (prog->progs->numfielddefs + numrequiredfields) * sizeof(ddef_t)); + prog->fielddefs = (ddef_t *)Mem_Alloc(prog->progs_mempool, (prog->progs->numfielddefs + numrequiredfields) * sizeof(ddef_t)); prog->statements = (dstatement_t *)((qbyte *)prog->progs + prog->progs->ofs_statements); @@ -1339,7 +1343,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required prog->statements[i].c = LittleShort(prog->statements[i].c); } - prog->functions = Mem_Alloc(prog->progs_mempool, sizeof(mfunction_t) * prog->progs->numfunctions); + prog->functions = (mfunction_t *)Mem_Alloc(prog->progs_mempool, sizeof(mfunction_t) * prog->progs->numfunctions); for (i = 0;i < prog->progs->numfunctions;i++) { prog->functions[i].first_statement = LittleLong (dfunctions[i].first_statement); @@ -1493,7 +1497,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required } } - PRVM_LoadLNO( filename ); + PRVM_LoadLNO(filename); PRVM_Init_Exec(); @@ -1554,7 +1558,7 @@ void PRVM_Fields_f (void) if(!PRVM_SetProgFromString(Cmd_Argv(1))) return; - counts = Mem_Alloc(tempmempool, prog->progs->numfielddefs * sizeof(int)); + counts = (int *)Mem_Alloc(tempmempool, prog->progs->numfielddefs * sizeof(int)); for (ednum = 0;ednum < prog->max_edicts;ednum++) { ed = PRVM_EDICT_NUM(ednum); @@ -1626,7 +1630,7 @@ void PRVM_Fields_f (void) name = tempstring2; } strcat(tempstring, name); - for (j = strlen(name);j < 25;j++) + for (j = (int)strlen(name);j < 25;j++) strcat(tempstring, " "); sprintf(tempstring2, "%5d", counts[i]); strcat(tempstring, tempstring2); @@ -1697,7 +1701,7 @@ void PRVM_Global_f(void) if( !global ) Con_Printf( "No global '%s' in %s!\n", Cmd_Argv(2), Cmd_Argv(1) ); else - Con_Printf( "%s: %s\n", Cmd_Argv(2), PRVM_ValueString( global->type, (prvm_eval_t *) &prog->globals.generic[ global->ofs ] ) ); + Con_Printf( "%s: %s\n", Cmd_Argv(2), PRVM_ValueString( (etype_t)global->type, (prvm_eval_t *) &prog->globals.generic[ global->ofs ] ) ); PRVM_End; } @@ -1883,8 +1887,8 @@ int PRVM_SetEngineString(const char *s) const char **oldstrings = prog->knownstrings; const qbyte *oldstrings_freeable = prog->knownstrings_freeable; prog->maxknownstrings += 128; - prog->knownstrings = PRVM_Alloc(prog->maxknownstrings * sizeof(char *)); - prog->knownstrings_freeable = PRVM_Alloc(prog->maxknownstrings * sizeof(qbyte)); + prog->knownstrings = (const char **)PRVM_Alloc(prog->maxknownstrings * sizeof(char *)); + prog->knownstrings_freeable = (qbyte *)PRVM_Alloc(prog->maxknownstrings * sizeof(qbyte)); if (prog->numknownstrings) { memcpy((char **)prog->knownstrings, oldstrings, prog->numknownstrings * sizeof(char *)); @@ -1898,7 +1902,7 @@ int PRVM_SetEngineString(const char *s) return -1 - i; } -int PRVM_AllocString(int bufferlength, char **pointer) +int PRVM_AllocString(size_t bufferlength, char **pointer) { int i; if (!bufferlength) @@ -1913,8 +1917,8 @@ int PRVM_AllocString(int bufferlength, char **pointer) const char **oldstrings = prog->knownstrings; const qbyte *oldstrings_freeable = prog->knownstrings_freeable; prog->maxknownstrings += 128; - prog->knownstrings = PRVM_Alloc(prog->maxknownstrings * sizeof(char *)); - prog->knownstrings_freeable = PRVM_Alloc(prog->maxknownstrings * sizeof(qbyte)); + prog->knownstrings = (const char **)PRVM_Alloc(prog->maxknownstrings * sizeof(char *)); + prog->knownstrings_freeable = (qbyte *)PRVM_Alloc(prog->maxknownstrings * sizeof(qbyte)); if (prog->numknownstrings) { memcpy((char **)prog->knownstrings, oldstrings, prog->numknownstrings * sizeof(char *)); @@ -1924,7 +1928,7 @@ int PRVM_AllocString(int bufferlength, char **pointer) prog->numknownstrings++; } prog->firstfreeknownstring = i + 1; - prog->knownstrings[i] = PRVM_Alloc(bufferlength); + prog->knownstrings[i] = (char *)PRVM_Alloc(bufferlength); prog->knownstrings_freeable[i] = true; if (pointer) *pointer = (char *)(prog->knownstrings[i]);