switch (type)
{
case ev_string:
- strncpy(line, PRVM_GetString(val->string), sizeof(line));
+ strlcpy (line, PRVM_GetString (val->string), sizeof (line));
break;
case ev_entity:
n = val->edict;
break;
case ev_function:
f = pr_functions + val->function;
- strncpy(line, PRVM_GetString(f->s_name), sizeof(line));
+ strlcpy (line, PRVM_GetString (f->s_name), sizeof (line));
break;
case ev_field:
def = PRVM_ED_FieldAtOfs ( val->_int );
if (strlen(name) > 256)
{
- strncpy(tempstring2, name, 256);
+ memcpy (tempstring2, name, 256);
tempstring2[256] = tempstring2[257] = tempstring2[258] = '.';
tempstring2[259] = 0;
name = tempstring2;
name = PRVM_ValueString(d->type, (prvm_eval_t *)v);
if (strlen(name) > 256)
{
- strncpy(tempstring2, name, 256);
+ memcpy (tempstring2, name, 256);
tempstring2[256] = tempstring2[257] = tempstring2[258] = '.';
tempstring2[259] = 0;
name = tempstring2;
int i;
dstatement_t *st;
ddef_t *infielddefs;
- void *temp;
dfunction_t *dfunctions;
Mem_EmptyPool(prog->progs_mempool);
Mem_EmptyPool(prog->edictstring_mempool);
- temp = FS_LoadFile (filename, false);
- if (temp == 0)
+ prog->progs = (dprograms_t *)FS_LoadFile (filename, prog->progs_mempool, false);
+ if (prog->progs == NULL)
PRVM_ERROR ("PRVM_LoadProgs: couldn't load %s for %s", filename, PRVM_NAME);
- prog->progs = (dprograms_t *)Mem_Alloc(prog->progs_mempool, fs_filesize);
-
- memcpy(prog->progs, temp, fs_filesize);
- Mem_Free(temp);
-
Con_DPrintf("%s programs occupy %iK.\n", PRVM_NAME, fs_filesize/1024);
pr_crc = CRC_Block((qbyte *)prog->progs, fs_filesize);
}
if (strlen(name) > 256)
{
- strncpy(tempstring2, name, 256);
+ memcpy (tempstring2, name, 256);
tempstring2[256] = tempstring2[257] = tempstring2[258] = '.';
tempstring2[259] = 0;
name = tempstring2;
PRVM_End;
}
+/*
+===============
+PRVM_Global
+===============
+*/
+void PRVM_Global_f(void)
+{
+ ddef_t *global;
+ if( Cmd_Argc() != 3 ) {
+ Con_Printf( "prvm_global <program name> <global name>\n" );
+ return;
+ }
+
+ PRVM_Begin;
+ if( !PRVM_SetProgFromString( Cmd_Argv(1) ) )
+ return;
+
+ global = PRVM_ED_FindGlobal( Cmd_Argv(2) );
+ 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[ global->ofs ] ) );
+ PRVM_End;
+}
+
/*
===============
PRVM_Init
Cmd_AddCommand ("prvm_profile", PRVM_Profile_f);
Cmd_AddCommand ("prvm_fields", PRVM_Fields_f);
Cmd_AddCommand ("prvm_globals", PRVM_Globals_f);
+ Cmd_AddCommand ("prvm_global", PRVM_Global_f);
Cmd_AddCommand ("prvm_edictset", PRVM_ED_EdictSet_f);
// LordHavoc: optional runtime bounds checking (speed drain, but worth it for security, on by default - breaks most QCCX features (used by CRMod and others))
Cvar_RegisterVariable (&prvm_boundscheck);