mirror of
https://git.code.sf.net/p/quake/newtree
synced 2025-02-01 20:30:57 +00:00
fixed a bug in Cvar_Info()
This commit is contained in:
parent
55fbc12c3d
commit
efc900e371
1 changed files with 48 additions and 21 deletions
|
@ -29,29 +29,56 @@
|
|||
#include "qwsvdef.h"
|
||||
|
||||
void SV_SendServerInfoChange(char *key, char *value);
|
||||
/* extern cvar_t sv_highchars;
|
||||
CVAR_FIXME */
|
||||
extern cvar_t *sv_highchars;
|
||||
|
||||
void
|
||||
Cvar_Info(cvar_t *var)
|
||||
/* extern cvar_t sv_highchars;
|
||||
CVAR_FIXME */
|
||||
extern cvar_t *sv_highchars;
|
||||
|
||||
/*
|
||||
=================
|
||||
Cvar_Info
|
||||
|
||||
Sets a given cvar (key,value) into svs.info (serverinfo)
|
||||
high char filtering is performed according to sv_highchars.value
|
||||
=================
|
||||
*/
|
||||
|
||||
void Cvar_Info (cvar_t *var)
|
||||
{
|
||||
if (var->flags & CVAR_SERVERINFO)
|
||||
{
|
||||
unsigned char info[1024],*p, *c;
|
||||
if (var->flags & CVAR_SERVERINFO)
|
||||
{
|
||||
unsigned char info[1024], *p, *c;
|
||||
|
||||
for (p=info, c=var->string; *c && (p-info<sizeof(info)-1); c++, p++) {
|
||||
if (!sv_highchars->value) {
|
||||
*c &= 127;
|
||||
if (*c < 32 || *c > 127)
|
||||
continue;
|
||||
*p = *c;
|
||||
}
|
||||
}
|
||||
*p=0;
|
||||
/*
|
||||
for (p=info, c=var->string; *c && (p-info<sizeof(info)-1); c++, p++) {
|
||||
if (! sv_highchars.value) {
|
||||
*c &= 127;
|
||||
if (*c < 32 || *c > 127)
|
||||
continue;
|
||||
*p = *c;
|
||||
}
|
||||
}
|
||||
*p=0;
|
||||
Info_SetValueForKey (svs.info, var->name, info, MAX_SERVERINFO_STRING);
|
||||
*/
|
||||
|
||||
Info_SetValueForKey (svs.info, var->name, info, MAX_SERVERINFO_STRING);
|
||||
SV_SendServerInfoChange(var->name, var->string);
|
||||
// SV_BroadcastCommand ("fullserverinfo \"%s\"\n", svs.info);
|
||||
}
|
||||
// bug above: info[] is not set if sv_highchar == 1
|
||||
// plus, high chars are skipped and replaced with whatever is on the stack in info[]
|
||||
// because p is still incremented
|
||||
|
||||
if (! sv_highchars->value) {
|
||||
for (p=info, c=var->string; *c && (p-info<sizeof(info)-1); ) {
|
||||
*c &= 0x7f;
|
||||
if (*c >= 32) *p++ = *c;
|
||||
c++;
|
||||
}
|
||||
*p=0;
|
||||
Info_SetValueForKey (svs.info, var->name, info, MAX_SERVERINFO_STRING);
|
||||
}
|
||||
else
|
||||
Info_SetValueForKey (svs.info, var->name, var->string, MAX_SERVERINFO_STRING);
|
||||
|
||||
SV_SendServerInfoChange (var->name, var->string);
|
||||
// SV_BroadcastCommand ("fullserverinfo \"%s\"\n", svs.info);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue