q3map2: fix crash if command-line argument is missing
Running `q3map2 -fs_forbiddenpath -v mapname.map` would crash because -v gets replaced with NULL in main(). Running `q3map2 -threads` would crash because missing next argument for number of threads.
This commit is contained in:
@@ -86,14 +86,16 @@ int main( int argc, char **argv ){
|
||||
/* -help */
|
||||
if ( !strcmp( argv[ i ], "-h" ) || !strcmp( argv[ i ], "--help" )
|
||||
|| !strcmp( argv[ i ], "-help" ) ) {
|
||||
HelpMain( argv[i+1] );
|
||||
HelpMain( ( i + 1 < argc ) ? argv[ i + 1 ] : NULL );
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -connect */
|
||||
if ( !strcmp( argv[ i ], "-connect" ) ) {
|
||||
argv[ i ] = NULL;
|
||||
i++;
|
||||
if ( ++i >= argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No address specified after %s", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
Broadcast_Setup( argv[ i ] );
|
||||
argv[ i ] = NULL;
|
||||
}
|
||||
@@ -114,8 +116,10 @@ int main( int argc, char **argv ){
|
||||
|
||||
/* patch subdivisions */
|
||||
else if ( !strcmp( argv[ i ], "-subdivisions" ) ) {
|
||||
argv[ i ] = NULL;
|
||||
i++;
|
||||
if ( ++i >= argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No value specified after %s", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
patchSubdivisions = atoi( argv[ i ] );
|
||||
argv[ i ] = NULL;
|
||||
if ( patchSubdivisions <= 0 ) {
|
||||
@@ -125,8 +129,10 @@ int main( int argc, char **argv ){
|
||||
|
||||
/* threads */
|
||||
else if ( !strcmp( argv[ i ], "-threads" ) ) {
|
||||
argv[ i ] = NULL;
|
||||
i++;
|
||||
if ( ++i >= argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No value specified after %s", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
numthreads = atoi( argv[ i ] );
|
||||
argv[ i ] = NULL;
|
||||
}
|
||||
|
||||
@@ -412,7 +412,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -game */
|
||||
if ( strcmp( argv[ i ], "-game" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No game specified after %s", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -425,7 +425,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_forbiddenpath */
|
||||
else if ( strcmp( argv[ i ], "-fs_forbiddenpath" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -439,7 +439,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_basepath */
|
||||
else if ( strcmp( argv[ i ], "-fs_basepath" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -449,7 +449,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_game */
|
||||
else if ( strcmp( argv[ i ], "-fs_game" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -459,7 +459,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_home */
|
||||
else if ( strcmp( argv[ i ], "-fs_home" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -469,7 +469,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_homebase */
|
||||
else if ( strcmp( argv[ i ], "-fs_homebase" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -479,7 +479,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_homepath - sets both of them */
|
||||
else if ( strcmp( argv[ i ], "-fs_homepath" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
@@ -490,7 +490,7 @@ void InitPaths( int *argc, char **argv ){
|
||||
|
||||
/* -fs_pakpath */
|
||||
else if ( strcmp( argv[ i ], "-fs_pakpath" ) == 0 ) {
|
||||
if ( ++i >= *argc ) {
|
||||
if ( ++i >= *argc || !argv[ i ] ) {
|
||||
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
|
||||
}
|
||||
argv[ i - 1 ] = NULL;
|
||||
|
||||
Reference in New Issue
Block a user