summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/cl_locs.c10
-rw-r--r--source/cl_parse.c11
-rw-r--r--source/mvd_client.c2
-rw-r--r--source/q_shared.c56
-rw-r--r--source/q_shared.h14
-rw-r--r--source/sv_main.c4
-rw-r--r--source/sv_user.c21
-rw-r--r--source/ui_demos.c2
8 files changed, 51 insertions, 69 deletions
diff --git a/source/cl_locs.c b/source/cl_locs.c
index 71cef2d..8a08359 100644
--- a/source/cl_locs.c
+++ b/source/cl_locs.c
@@ -44,13 +44,13 @@ LOC_Alloc
static location_t *LOC_Alloc( const char *name ) {
location_t *loc;
char buffer[MAX_QPATH];
- size_t length;
+ size_t len;
- Q_ClearStr( buffer, name, sizeof( buffer ) );
+ Q_strlcpy( buffer, name, sizeof( buffer ) );
+ len = COM_strclr( buffer );
- length = strlen( buffer );
- loc = Z_Malloc( sizeof( *loc ) + length );
- memcpy( loc->name, buffer, length + 1 );
+ loc = Z_Malloc( sizeof( *loc ) + len );
+ memcpy( loc->name, buffer, len + 1 );
List_Append( &cl_locations, &loc->entry );
return loc;
diff --git a/source/cl_parse.c b/source/cl_parse.c
index 178f014..75ed182 100644
--- a/source/cl_parse.c
+++ b/source/cl_parse.c
@@ -1326,6 +1326,7 @@ CL_ParsePrint
static void CL_ParsePrint( void ) {
int level;
char string[MAX_STRING_CHARS];
+ const char *fmt;
level = MSG_ReadByte();
MSG_ReadString( string, sizeof( string ) );
@@ -1335,6 +1336,7 @@ static void CL_ParsePrint( void ) {
if( level != PRINT_CHAT ) {
Com_Printf( "%s", string );
if( !cls.demo.playback ) {
+ COM_strclr( string );
Cmd_ExecTrigger( string );
}
return;
@@ -1353,11 +1355,13 @@ static void CL_ParsePrint( void ) {
// filter text
if( cl_chat_filter->integer ) {
- int len = Q_ClearStr( string, string, MAX_STRING_CHARS - 1 );
- string[len] = '\n';
+ COM_strclr( string );
+ fmt = "%s\n";
+ } else {
+ fmt = "%s";
}
- Com_LPrintf( PRINT_TALK, "%s", string );
+ Com_LPrintf( PRINT_TALK, fmt, string );
Con_SkipNotify( qfalse );
@@ -1385,6 +1389,7 @@ static void CL_ParseCenterPrint( void ) {
SCR_CenterPrint( string );
if( !cls.demo.playback ) {
+ COM_strclr( string );
Cmd_ExecTrigger( string );
}
}
diff --git a/source/mvd_client.c b/source/mvd_client.c
index 86a72c3..56c3af8 100644
--- a/source/mvd_client.c
+++ b/source/mvd_client.c
@@ -1506,7 +1506,7 @@ static void list_recordings( void ) {
if( pos < 0 ) {
strcpy( buffer, "???" );
} else {
- Q_FormatFileSize( buffer, pos, sizeof( buffer ) );
+ COM_FormatFileSize( buffer, pos, sizeof( buffer ) );
}
} else {
strcpy( buffer, "-" );
diff --git a/source/q_shared.c b/source/q_shared.c
index e1112ea..a032749 100644
--- a/source/q_shared.c
+++ b/source/q_shared.c
@@ -381,62 +381,34 @@ int QDECL SortStricmp( const void *p1, const void *p2 ) {
/*
================
-Q_ClearStr
+COM_strclr
-Removes high-bit and unprintable characters.
-Return number of characters written, not including the NULL character.
+Operates inplace, normalizing high-bit and removing unprintable characters.
+Returns final number of characters, not including the NUL character.
================
*/
-int Q_ClearStr( char *out, const char *in, int bufsize ) {
- char *p, *m;
+size_t COM_strclr( char *s ) {
+ char *p;
int c;
+ size_t len;
- if( bufsize < 1 ) {
- Com_Error( ERR_FATAL, "%s: bad bufsize: %d", __func__, bufsize );
- }
-
- p = out;
- m = out + bufsize - 1;
- while( *in && p < m ) {
- c = *in++;
+ p = s;
+ len = 0;
+ while( *s ) {
+ c = *s++;
c &= 127;
if( Q_isprint( c ) ) {
*p++ = c;
+ len++;
}
}
*p = 0;
- return p - out;
-}
-
-int Q_HighlightStr( char *out, const char *in, int bufsize ) {
- char *p, *m;
- int c;
-
- if( bufsize < 1 ) {
- Com_Error( ERR_FATAL, "%s: bad bufsize: %d", __func__, bufsize );
- }
-
- p = out;
- m = out + bufsize - 1;
- while( *in && p < m ) {
- c = *in++;
- c |= 128;
- *p++ = c;
- }
-
- *p = 0;
-
- return p - out;
+ return len;
}
-/*
-================
-Q_IsWhiteSpace
-================
-*/
-qboolean Q_IsWhiteSpace( const char *s ) {
+qboolean COM_iswhite( const char *s ) {
int c;
while( *s ) {
@@ -450,7 +422,7 @@ qboolean Q_IsWhiteSpace( const char *s ) {
return qtrue;
}
-size_t Q_FormatFileSize( char *dest, size_t bytes, size_t size ) {
+size_t COM_FormatFileSize( char *dest, size_t bytes, size_t size ) {
if( bytes >= 1000000 ) {
return Q_snprintf( dest, size, "%2.1fM", ( float )bytes / 1000000 );
}
diff --git a/source/q_shared.h b/source/q_shared.h
index 400f9e2..3f2b463 100644
--- a/source/q_shared.h
+++ b/source/q_shared.h
@@ -331,11 +331,6 @@ static inline int rand_byte( void ) {
#define Q_SetBit( data, bit ) ( (data)[(bit) >> 3] |= ( 1 << ( (bit) & 7 ) ) )
#define Q_ClearBit( data, bit ) ( (data)[(bit) >> 3] &= ~( 1 << ( (bit) & 7 ) ) )
-qboolean Q_IsWhiteSpace( const char *string );
-size_t Q_FormatFileSize( char *dest, size_t bytes, size_t size );
-int Q_ClearStr( char *out, const char *in, int bufsize );
-int Q_HighlightStr( char *out, const char *in, int bufsize );
-
//=============================================
// fast "C" macros
@@ -449,6 +444,8 @@ qboolean COM_IsFloat( const char *s );
qboolean COM_IsUint( const char *s );
qboolean COM_HasSpaces( const char *s );
+unsigned COM_ParseHex( const char *s );
+
char *COM_Parse( const char **data_p );
// data is an in/out parm, returns a parsed out token
int COM_Compress( char *data );
@@ -456,6 +453,11 @@ int COM_Compress( char *data );
int QDECL SortStrcmp( const void *p1, const void *p2 );
int QDECL SortStricmp( const void *p1, const void *p2 );
+size_t COM_strclr( char *s );
+qboolean COM_iswhite( const char *s );
+
+size_t COM_FormatFileSize( char *dest, size_t bytes, size_t size );
+
// buffer safe operations
size_t Q_strlcpy( char *dst, const char *src, size_t size );
size_t Q_strlcat( char *dst, const char *src, size_t size );
@@ -467,8 +469,6 @@ size_t Q_vscnprintf( char *dest, size_t size, const char *fmt, va_list argptr );
size_t Q_snprintf( char *dest, size_t size, const char *fmt, ... ) q_printf( 3, 4 );
size_t Q_scnprintf( char *dest, size_t size, const char *fmt, ... ) q_printf( 3, 4 );
-unsigned COM_ParseHex( const char *string );
-
char *va( const char *format, ... ) q_printf( 1, 2 );
//=============================================
diff --git a/source/sv_main.c b/source/sv_main.c
index c7e3a40..9c8d2a0 100644
--- a/source/sv_main.c
+++ b/source/sv_main.c
@@ -705,7 +705,7 @@ static void SVC_DirectConnect( void ) {
}
s = Info_ValueForKey( info, "name" );
- if( Q_IsWhiteSpace( s ) ) {
+ if( COM_iswhite( s ) ) {
SV_OobPrintf( "Please set your name before connecting.\n" );
Com_DPrintf( " rejected - empty name.\n" );
return;
@@ -1665,7 +1665,7 @@ void SV_UpdateUserinfo( char *userinfo ) {
}
s = Info_ValueForKey( userinfo, "name" );
- if( Q_IsWhiteSpace( s ) ) {
+ if( COM_iswhite( s ) ) {
if( sv_client->name[0] ) {
SV_ClientCommand( sv_client, "set name \"%s\"\n", sv_client->name );
} else {
diff --git a/source/sv_user.c b/source/sv_user.c
index a8cfc67..7f7c299 100644
--- a/source/sv_user.c
+++ b/source/sv_user.c
@@ -572,15 +572,14 @@ static void SV_BeginDownload_f( void ) {
ssize_t downloadsize, maxdownloadsize, result;
int offset = 0;
cvar_t *allow;
- int length;
+ size_t len;
unsigned flags;
qhandle_t f;
- length = Q_ClearStr( name, Cmd_Argv( 1 ), sizeof( name ) );
- Q_strlwr( name );
-
- if( Cmd_Argc() > 2 )
- offset = atoi( Cmd_Argv( 2 ) ); // downloaded offset
+ len = Cmd_ArgvBuffer( 1, name, sizeof( name ) );
+ if( len >= MAX_QPATH ) {
+ goto fail1;
+ }
// hack for 'status' command
if( !strcmp( name, "http" ) ) {
@@ -588,11 +587,17 @@ static void SV_BeginDownload_f( void ) {
return;
}
+ len = COM_strclr( name );
+ Q_strlwr( name );
+
+ if( Cmd_Argc() > 2 )
+ offset = atoi( Cmd_Argv( 2 ) ); // downloaded offset
+
// hacked by zoid to allow more conrol over download
// first off, no .. or global allow check
if( !allow_download->integer
// check for empty paths
- || !length
+ || !len
// check for illegal negative offsets
|| offset < 0
// don't allow anything with .. path
@@ -600,7 +605,7 @@ static void SV_BeginDownload_f( void ) {
// leading dots, slashes, etc are no good
|| !Q_ispath( name[0] )
// trailing dots, slashes, etc are no good
- || !Q_ispath( name[ length - 1 ] )
+ || !Q_ispath( name[ len - 1 ] )
// back slashes should be never sent
|| strchr( name, '\\' )
// colons are bad also
diff --git a/source/ui_demos.c b/source/ui_demos.c
index ce2e8d7..9e15a01 100644
--- a/source/ui_demos.c
+++ b/source/ui_demos.c
@@ -85,7 +85,7 @@ static void BuildName( file_info_t *info, char **cache ) {
CL_GetDemoInfo( buffer, &demo );
}
- Q_FormatFileSize( buffer, info->size, sizeof( buffer ) );
+ COM_FormatFileSize( buffer, info->size, sizeof( buffer ) );
e = UI_FormatColumns( DEMO_EXTRASIZE,
info->name, buffer, demo.map, demo.pov, NULL );