From 6ab5f951ce4b57ab2dd53732fc93d72d7bc085c4 Mon Sep 17 00:00:00 2001 From: tma Date: Wed, 27 Aug 2008 20:00:34 +0000 Subject: * Collapse common command completion code into one function and fix the incorrect buffer size parameter to strncpy (from the how-the-fuck-did-this-ever-work dept.) git-svn-id: svn://svn.icculus.org/quake3/trunk@1460 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/qcommon/common.c | 95 +++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 57 deletions(-) diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 88dab5e..7036f2f 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -3131,37 +3131,52 @@ static char *Field_FindFirstSeparator( char *s ) return NULL; } -#ifndef DEDICATED /* =============== -Field_CompleteKeyname +Field_Complete =============== */ -static void Field_CompleteKeyname( void ) +static qboolean Field_Complete( void ) { - matchCount = 0; - shortestMatch[ 0 ] = 0; - - Key_KeynameCompletion( FindMatches ); + int completionOffset; if( matchCount == 0 ) - return; + return qfalse; + + completionOffset = strlen( completionField->buffer ) - strlen( completionString ); + + Q_strncpyz( &completionField->buffer[ completionOffset ], shortestMatch, + sizeof( completionField->buffer ) - completionOffset ); - Q_strncpyz( &completionField->buffer[ strlen( completionField->buffer ) - - strlen( completionString ) ], shortestMatch, - sizeof( completionField->buffer ) ); completionField->cursor = strlen( completionField->buffer ); if( matchCount == 1 ) { Q_strcat( completionField->buffer, sizeof( completionField->buffer ), " " ); completionField->cursor++; - return; + return qtrue; } Com_Printf( "]%s\n", completionField->buffer ); - - Key_KeynameCompletion( PrintMatches ); + + return qfalse; +} + +#ifndef DEDICATED +/* +=============== +Field_CompleteKeyname +=============== +*/ +static void Field_CompleteKeyname( void ) +{ + matchCount = 0; + shortestMatch[ 0 ] = 0; + + Key_KeynameCompletion( FindMatches ); + + if( !Field_Complete( ) ) + Key_KeynameCompletion( PrintMatches ); } #endif @@ -3178,24 +3193,8 @@ static void Field_CompleteFilename( const char *dir, FS_FilenameCompletion( dir, ext, stripExt, FindMatches ); - if( matchCount == 0 ) - return; - - Q_strncpyz( &completionField->buffer[ strlen( completionField->buffer ) - - strlen( completionString ) ], shortestMatch, - sizeof( completionField->buffer ) ); - completionField->cursor = strlen( completionField->buffer ); - - if( matchCount == 1 ) - { - Q_strcat( completionField->buffer, sizeof( completionField->buffer ), " " ); - completionField->cursor++; - return; - } - - Com_Printf( "]%s\n", completionField->buffer ); - - FS_FilenameCompletion( dir, ext, stripExt, PrintMatches ); + if( !Field_Complete( ) ) + FS_FilenameCompletion( dir, ext, stripExt, PrintMatches ); } /* @@ -3346,8 +3345,6 @@ static void Field_CompleteCommand( char *cmd, } else { - int completionOffset; - if( completionString[0] == '\\' || completionString[0] == '/' ) completionString++; @@ -3363,31 +3360,15 @@ static void Field_CompleteCommand( char *cmd, if( doCvars ) Cvar_CommandCompletion( FindMatches ); - if( matchCount == 0 ) - return; // no matches - - completionOffset = strlen( completionField->buffer ) - strlen( completionString ); - - Q_strncpyz( &completionField->buffer[ completionOffset ], shortestMatch, - sizeof( completionField->buffer ) - completionOffset ); - - completionField->cursor = strlen( completionField->buffer ); - - if( matchCount == 1 ) + if( !Field_Complete( ) ) { - Q_strcat( completionField->buffer, sizeof( completionField->buffer ), " " ); - completionField->cursor++; - return; - } + // run through again, printing matches + if( doCommands ) + Cmd_CommandCompletion( PrintMatches ); - Com_Printf( "]%s\n", completionField->buffer ); - - // run through again, printing matches - if( doCommands ) - Cmd_CommandCompletion( PrintMatches ); - - if( doCvars ) - Cvar_CommandCompletion( PrintCvarMatches ); + if( doCvars ) + Cvar_CommandCompletion( PrintCvarMatches ); + } } } -- cgit v1.2.3