- apply patch for constant len path & buffer to 1024 from Robert

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6753 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 58f4b114252a1e279f51c42b5e0dba31dcbdecfb
Former-commit-id: e64b75a1795a27eee04ca3305918cfe998d304ca
This commit is contained in:
torcs-ng 2019-11-06 09:09:11 +00:00
parent 5d448cdaaf
commit 34b663615f
7 changed files with 73 additions and 44 deletions

View file

@ -139,7 +139,7 @@ static void ReCareerNewResultXml( const char* filename, double date )
{ {
void *results; void *results;
snprintf( buf, 1024, filename, "results", "", "", "", "" ); snprintf( buf, sizeof(buf), filename, "results", "", "", "", "" );
ReInfo->results = GfParmReadFile( buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT ); ReInfo->results = GfParmReadFile( buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT );
results = ReInfo->results; results = ReInfo->results;
@ -159,7 +159,7 @@ static void ReCareerNewResult( const char* filename, const char *suffix, const c
{ {
void *results; void *results;
snprintf( buf, 1024, filename, "results", "_", suffix, group, "s" ); snprintf( buf, sizeof(buf), filename, "results", "_", suffix, group, "s" );
results = GfParmReadFile( buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT ); results = GfParmReadFile( buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT );
GfParmSetStr(subparam, RM_SECT_SUBFILES, RM_ATTR_RESULTSUBFILE, buf); GfParmSetStr(subparam, RM_SECT_SUBFILES, RM_ATTR_RESULTSUBFILE, buf);
@ -226,12 +226,12 @@ static void ReCareerNewAddDrivers( void *curParam, void *curResult, char *humans
GfLogDebug(" %d : human #%d, ext=%d\n", xx, GfLogDebug(" %d : human #%d, ext=%d\n", xx,
(int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 1), (int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 1),
(int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_EXTENDED, NULL, 1)); (int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_EXTENDED, NULL, 1));
sprintf( buf, "%s/%d", RM_SECT_DRIVERS, xx + 1 ); snprintf( buf, sizeof(buf), "%s/%d", RM_SECT_DRIVERS, xx + 1 );
GfParmSetStr(curParam, buf, RM_ATTR_MODULE, "human"); GfParmSetStr(curParam, buf, RM_ATTR_MODULE, "human");
GfParmSetNum(curParam, buf, RM_ATTR_IDX, NULL, GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 1 ) ); GfParmSetNum(curParam, buf, RM_ATTR_IDX, NULL, GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 1 ) );
GfParmSetNum(curParam, buf, RM_ATTR_EXTENDED, NULL, GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, GfParmSetNum(curParam, buf, RM_ATTR_EXTENDED, NULL, GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS,
RM_ATTR_EXTENDED, NULL, 1) ); RM_ATTR_EXTENDED, NULL, 1) );
sprintf( buf, "%s/%s/%d/%d/%s", RM_SECT_CLASSPOINTS, "human", snprintf( buf, sizeof(buf), "%s/%s/%d/%d/%s", RM_SECT_CLASSPOINTS, "human",
(int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_EXTENDED, NULL, 1), (int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_EXTENDED, NULL, 1),
(int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 1 ), (int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 1 ),
GfParmGetStr( curParam, RM_SECT_SUBFILES, RM_ATTR_SUFFIX, "" ) ); GfParmGetStr( curParam, RM_SECT_SUBFILES, RM_ATTR_SUFFIX, "" ) );
@ -246,15 +246,15 @@ static void ReCareerNewAddDrivers( void *curParam, void *curResult, char *humans
/* Now it is certain that a bot should be added : no humans at this point */ /* Now it is certain that a bot should be added : no humans at this point */
GfLogDebug(" %d : simplix #%d, ext=%d\n", xx, xx, 1); GfLogDebug(" %d : simplix #%d, ext=%d\n", xx, xx, 1);
sprintf( buf, "%s/%d", RM_SECT_DRIVERS, xx + 1 ); snprintf( buf, sizeof(buf), "%s/%d", RM_SECT_DRIVERS, xx + 1 );
path2 = strdup( buf ); path2 = strdup( buf );
GfParmSetStr(curParam, path2, RM_ATTR_MODULE, "simplix"); GfParmSetStr(curParam, path2, RM_ATTR_MODULE, "simplix");
GfParmSetNum(curParam, path2, RM_ATTR_IDX, NULL, (tdble)xx); GfParmSetNum(curParam, path2, RM_ATTR_IDX, NULL, (tdble)xx);
GfParmSetNum(curParam, path2, RM_ATTR_EXTENDED, NULL, 1); GfParmSetNum(curParam, path2, RM_ATTR_EXTENDED, NULL, 1);
free( path2 ); free( path2 );
sprintf( buf, "%s/%s/%d/%d", RM_SECT_DRIVERINFO, "simplix", 1, xx ); snprintf( buf, sizeof(buf), "%s/%s/%d/%d", RM_SECT_DRIVERINFO, "simplix", 1, xx );
path2 = strdup( buf ); path2 = strdup( buf );
snprintf( buf, 1024, "%s %s", GfParmGetCurStr(ReInfo->params, RM_SECT_FIRSTNAME, RM_ATTR_NAME, "Foo"), snprintf( buf, sizeof(buf), "%s %s", GfParmGetCurStr(ReInfo->params, RM_SECT_FIRSTNAME, RM_ATTR_NAME, "Foo"),
GfParmGetCurStr(ReInfo->params, RM_SECT_LASTNAME, RM_ATTR_NAME, "Bar") ); GfParmGetCurStr(ReInfo->params, RM_SECT_LASTNAME, RM_ATTR_NAME, "Bar") );
GfParmSetStr(curParam, path2, RM_ATTR_NAME, buf); GfParmSetStr(curParam, path2, RM_ATTR_NAME, buf);
if( GfParmListSeekNext(ReInfo->params, RM_SECT_FIRSTNAME) != 0 ) if( GfParmListSeekNext(ReInfo->params, RM_SECT_FIRSTNAME) != 0 )
@ -264,7 +264,7 @@ static void ReCareerNewAddDrivers( void *curParam, void *curResult, char *humans
GfParmSetNum(curParam, path2, RM_ATTR_SKILLLEVEL, NULL, (tdble) ReCareerNewSkill( GfParmGetEltNb( ReInfo->params, RM_SECT_CLASSES ), classNb ) ); GfParmSetNum(curParam, path2, RM_ATTR_SKILLLEVEL, NULL, (tdble) ReCareerNewSkill( GfParmGetEltNb( ReInfo->params, RM_SECT_CLASSES ), classNb ) );
/* Add a driver to the result section */ /* Add a driver to the result section */
snprintf( buf, 1024, "%s/%s/%d/%d/%s", RE_SECT_CLASSPOINTS, "simplix", 1, xx, GfParmGetStr( curParam, RM_SECT_SUBFILES, RM_ATTR_SUFFIX, "" ) ); snprintf( buf, sizeof(buf), "%s/%s/%d/%d/%s", RE_SECT_CLASSPOINTS, "simplix", 1, xx, GfParmGetStr( curParam, RM_SECT_SUBFILES, RM_ATTR_SUFFIX, "" ) );
GfParmSetNum( curResult, buf, RE_ATTR_POINTS, NULL, 1.0f ); GfParmSetNum( curResult, buf, RE_ATTR_POINTS, NULL, 1.0f );
free(path2); free(path2);
@ -289,7 +289,7 @@ static void ReCareerNewAddTeams( void *curParam, void *curResult, int curIndex,
GfParmListSeekFirst( curParam, RM_SECT_TEAMS ); GfParmListSeekFirst( curParam, RM_SECT_TEAMS );
do { do {
if( cur >= start ) { if( cur >= start ) {
snprintf( buf, 1024, "%s/%s", RE_SECT_TEAMINFO, GfParmGetCurStr( curParam, RM_SECT_TEAMS, RM_ATTR_NAME, "" ) ); snprintf( buf, sizeof(buf), "%s/%s", RE_SECT_TEAMINFO, GfParmGetCurStr( curParam, RM_SECT_TEAMS, RM_ATTR_NAME, "" ) );
GfParmSetNum( curResult, buf, RE_ATTR_POINTS, NULL, 1.0f ); GfParmSetNum( curResult, buf, RE_ATTR_POINTS, NULL, 1.0f );
if( GfParmIsFormula( curParam, RM_SECT_TEAMS, RM_ATTR_CARNAME ) == 0 ) if( GfParmIsFormula( curParam, RM_SECT_TEAMS, RM_ATTR_CARNAME ) == 0 )
GfParmSetFormula( curResult, buf, RM_ATTR_CARNAME, GfParmGetCurFormula( curParam, RM_SECT_TEAMS, RM_ATTR_CARNAME ) ); GfParmSetFormula( curResult, buf, RM_ATTR_CARNAME, GfParmGetCurFormula( curParam, RM_SECT_TEAMS, RM_ATTR_CARNAME ) );
@ -364,10 +364,10 @@ static void* ReCareerNewGroup( const char *filename, void *param, const char *gr
char *params_filename; char *params_filename;
/* Save the params in a new file and open it */ /* Save the params in a new file and open it */
snprintf( buf, 1024, filename, "params", "_", GfParmGetStr(param, RM_SECT_SUBFILES, RM_ATTR_SUFFIX, ""), groupAlpha, "s" ); snprintf( buf, sizeof(buf), filename, "params", "_", GfParmGetStr(param, RM_SECT_SUBFILES, RM_ATTR_SUFFIX, ""), groupAlpha, "s" );
params_filename = strdup( buf ); params_filename = strdup( buf );
strncpy( buf, GfParmGetName(param), 1024 ); snprintf( buf, sizeof(buf), "%s", GfParmGetName(param) );
ReCareerUtilManipString( buf, groupNumber, 1024 ); ReCareerUtilManipString( buf, groupNumber, sizeof(buf) );
GfParmWriteFile( params_filename, param, buf ); GfParmWriteFile( params_filename, param, buf );
subparam = GfParmReadFile( params_filename, GFPARM_RMODE_STD ); subparam = GfParmReadFile( params_filename, GFPARM_RMODE_STD );
free( params_filename ); free( params_filename );
@ -378,16 +378,16 @@ static void* ReCareerNewGroup( const char *filename, void *param, const char *gr
/* Set name and description */ /* Set name and description */
GfParmSetVariable( subparam, RM_SECT_HEADER, "number", (tdble)groupNumber ); GfParmSetVariable( subparam, RM_SECT_HEADER, "number", (tdble)groupNumber );
strncpy( buf, GfParmGetStr( subparam, RM_SECT_HEADER, RM_ATTR_NAME, "" ), 1024 ); snprintf( buf, sizeof(buf), "%s", GfParmGetStr( subparam, RM_SECT_HEADER, RM_ATTR_NAME, "" ) );
GfParmSetStr( subparam, RM_SECT_HEADER, RM_ATTR_NAME, buf ); GfParmSetStr( subparam, RM_SECT_HEADER, RM_ATTR_NAME, buf );
strncpy( buf, GfParmGetStr( subparam, RM_SECT_HEADER, RM_ATTR_DESCR, "" ), 1024 ); snprintf( buf, sizeof(buf), "%s", GfParmGetStr( subparam, RM_SECT_HEADER, RM_ATTR_DESCR, "" ) );
GfParmSetStr( subparam, RM_SECT_HEADER, RM_ATTR_DESCR, buf ); GfParmSetStr( subparam, RM_SECT_HEADER, RM_ATTR_DESCR, buf );
GfParmRemoveVariable( subparam, RM_SECT_HEADER, "number" ); GfParmRemoveVariable( subparam, RM_SECT_HEADER, "number" );
/* Set that it is not the last subfile */ /* Set that it is not the last subfile */
GfParmSetStr( subparam, RM_SECT_SUBFILES, RM_ATTR_LASTSUBFILE, RM_VAL_NO ); GfParmSetStr( subparam, RM_SECT_SUBFILES, RM_ATTR_LASTSUBFILE, RM_VAL_NO );
GfParmSetNum( subparam, RM_SECT_TRACKS, RM_ATTR_TOTALNUM, NULL, (tdble)totalTracks ); GfParmSetNum( subparam, RM_SECT_TRACKS, RM_ATTR_TOTALNUM, NULL, (tdble)totalTracks );
snprintf( buf, 1024, "%s/%s/%s", RM_SECT_CLASSES, GfParmListGetCurEltName( ReInfo->params, RM_SECT_CLASSES ), RM_SECT_TRACKS ); snprintf( buf, sizeof(buf), "%s/%s/%s", RM_SECT_CLASSES, GfParmListGetCurEltName( ReInfo->params, RM_SECT_CLASSES ), RM_SECT_TRACKS );
GfParmSetNum( subparam, RM_SECT_TRACKS, RM_ATTR_MINNUM, NULL, (float)((int)GfParmGetNum( ReInfo->params, buf, RM_ATTR_MINNUM, NULL, (tdble)1 )) ); GfParmSetNum( subparam, RM_SECT_TRACKS, RM_ATTR_MINNUM, NULL, (float)((int)GfParmGetNum( ReInfo->params, buf, RM_ATTR_MINNUM, NULL, (tdble)1 )) );
GfParmSetNum( subparam, RM_SECT_TRACKS, RM_ATTR_MAXNUM, NULL, (float)((int)GfParmGetNum( ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, (tdble)totalTracks )) ); GfParmSetNum( subparam, RM_SECT_TRACKS, RM_ATTR_MAXNUM, NULL, (float)((int)GfParmGetNum( ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, (tdble)totalTracks )) );
@ -404,7 +404,7 @@ static void* ReCareerNewClass( const char* filename, void *prevParam, void **fir
int xx; int xx;
/* Open subfile */ /* Open subfile */
snprintf( buf, 1024, "%sconfig/raceman/%s", GfLocalDir(), GfParmGetCurStr(ReInfo->params, RM_SECT_CLASSES, RM_ATTR_SUBFILE, "") ); snprintf( buf, sizeof(buf), "%sconfig/raceman/%s", GfLocalDir(), GfParmGetCurStr(ReInfo->params, RM_SECT_CLASSES, RM_ATTR_SUBFILE, "") );
subparam = GfParmReadFile( buf, GFPARM_RMODE_STD ); subparam = GfParmReadFile( buf, GFPARM_RMODE_STD );
if( !subparam ) { if( !subparam ) {
GfLogError( "Subfile %s not found\n", buf ); GfLogError( "Subfile %s not found\n", buf );
@ -472,7 +472,7 @@ static void ReCareerNewParams( const char* filename, double date )
/* Calculate the maximum number of needed tracks */ /* Calculate the maximum number of needed tracks */
do { do {
snprintf( buf, 1024, "%s/%s/%s", RM_SECT_CLASSES, GfParmListGetCurEltName(ReInfo->params, RM_SECT_CLASSES), RM_SECT_TRACKS ); snprintf( buf, sizeof(buf), "%s/%s/%s", RM_SECT_CLASSES, GfParmListGetCurEltName(ReInfo->params, RM_SECT_CLASSES), RM_SECT_TRACKS );
if( totalTracks < 0 || totalTracks < (int)GfParmGetNum(ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, 1) ) if( totalTracks < 0 || totalTracks < (int)GfParmGetNum(ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, 1) )
totalTracks = (int)GfParmGetNum(ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, 1); totalTracks = (int)GfParmGetNum(ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, 1);
} while( GfParmListSeekNext(ReInfo->params, RM_SECT_CLASSES) == 0 ); } while( GfParmListSeekNext(ReInfo->params, RM_SECT_CLASSES) == 0 );
@ -513,7 +513,7 @@ void ReCareerNew()
t = time(NULL); t = time(NULL);
stm = localtime(&t); stm = localtime(&t);
snprintf( buf, 1024, "%sresults/%s/%%s-%4d-%02d-%02d-%02d-%02d%%s%%s%%s.xml%%s", GfLocalDir(), ReInfo->_reFilename, snprintf( buf, sizeof(buf), "%sresults/%s/%%s-%4d-%02d-%02d-%02d-%02d%%s%%s%%s.xml%%s", GfLocalDir(), ReInfo->_reFilename,
stm->tm_year + 1900, stm->tm_mon + 1, stm->tm_mday, stm->tm_hour, stm->tm_min ); stm->tm_year + 1900, stm->tm_mon + 1, stm->tm_mday, stm->tm_hour, stm->tm_min );
filename = strdup(buf); // Makes it possible to reuse buf filename = strdup(buf); // Makes it possible to reuse buf
ReCareerNewParams(filename, (double)t); ReCareerNewParams(filename, (double)t);
@ -611,7 +611,7 @@ void ReCareerNextAddDrivers( tDriverInfo ***drivers, int *listLength, tCareerInf
newDrivers[ xx ]->module = strdup( GfParmGetCurStr( curParam, RM_SECT_DRIVERS, RM_ATTR_MODULE, "" ) ); newDrivers[ xx ]->module = strdup( GfParmGetCurStr( curParam, RM_SECT_DRIVERS, RM_ATTR_MODULE, "" ) );
newDrivers[ xx ]->extended = (int)GfParmGetCurNum( curParam, RM_SECT_DRIVERS, RM_ATTR_EXTENDED, NULL, 0 ); newDrivers[ xx ]->extended = (int)GfParmGetCurNum( curParam, RM_SECT_DRIVERS, RM_ATTR_EXTENDED, NULL, 0 );
newDrivers[ xx ]->idx = (int)GfParmGetCurNum( curParam, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 0 ); newDrivers[ xx ]->idx = (int)GfParmGetCurNum( curParam, RM_SECT_DRIVERS, RM_ATTR_IDX, NULL, 0 );
snprintf( buf, 1024, "%s/%s/%d/%d", RM_SECT_DRIVERINFO, newDrivers[ xx ]->module, newDrivers[ xx ]->extended, newDrivers[ xx ]->idx ); snprintf( buf, sizeof(buf), "%s/%s/%d/%d", RM_SECT_DRIVERINFO, newDrivers[ xx ]->module, newDrivers[ xx ]->extended, newDrivers[ xx ]->idx );
newDrivers[ xx ]->name = strdup( GfParmGetStr( curParam, buf, RM_ATTR_NAME, "" ) ); newDrivers[ xx ]->name = strdup( GfParmGetStr( curParam, buf, RM_ATTR_NAME, "" ) );
newDrivers[ xx ]->skill = GfParmGetNum( curParam, buf, RM_ATTR_SKILLLEVEL, NULL, 5.0f ); newDrivers[ xx ]->skill = GfParmGetNum( curParam, buf, RM_ATTR_SKILLLEVEL, NULL, 5.0f );
newDrivers[ xx ]->classPointList = (double*)malloc( sizeof( double ) * info->nbClasses ); newDrivers[ xx ]->classPointList = (double*)malloc( sizeof( double ) * info->nbClasses );
@ -622,7 +622,7 @@ void ReCareerNextAddDrivers( tDriverInfo ***drivers, int *listLength, tCareerInf
/* Get class points */ /* Get class points */
classPosition[ xx - *listLength ] = (int*)malloc( sizeof(int) * info->nbClasses ); classPosition[ xx - *listLength ] = (int*)malloc( sizeof(int) * info->nbClasses );
snprintf( buf, 1024, "%s/%s/%d/%d", RE_SECT_CLASSPOINTS, newDrivers[ xx ]->module, newDrivers[ xx ]->extended, newDrivers[ xx ]->idx ); snprintf( buf, sizeof(buf), "%s/%s/%d/%d", RE_SECT_CLASSPOINTS, newDrivers[ xx ]->module, newDrivers[ xx ]->extended, newDrivers[ xx ]->idx );
for( yy = 0; yy < info->nbClasses; ++yy ) for( yy = 0; yy < info->nbClasses; ++yy )
{ {
newDrivers[ xx ]->classPointList[ yy ] = 0.0f; newDrivers[ xx ]->classPointList[ yy ] = 0.0f;
@ -675,7 +675,7 @@ void ReCareerNextAddDrivers( tDriverInfo ***drivers, int *listLength, tCareerInf
{ {
if( strcmp( info->classes[ yy ].suffix, GfParmGetCurStr( curParam, RM_SECT_ENDOFSEASON_CLASSPOINTS, RM_ATTR_SUFFIX, "" )) == 0 ) if( strcmp( info->classes[ yy ].suffix, GfParmGetCurStr( curParam, RM_SECT_ENDOFSEASON_CLASSPOINTS, RM_ATTR_SUFFIX, "" )) == 0 )
{ {
snprintf( buf, 1024, "%s/%s", RM_SECT_ENDOFSEASON_CLASSPOINTS, snprintf( buf, sizeof(buf), "%s/%s", RM_SECT_ENDOFSEASON_CLASSPOINTS,
GfParmListGetCurEltName( curParam, RM_SECT_ENDOFSEASON_CLASSPOINTS ) ); GfParmListGetCurEltName( curParam, RM_SECT_ENDOFSEASON_CLASSPOINTS ) );
GfParmSetVariable( curParam, buf, "curClassPos", (tdble)classPosition[ xx - *listLength ][ yy ] ); GfParmSetVariable( curParam, buf, "curClassPos", (tdble)classPosition[ xx - *listLength ][ yy ] );
GfParmSetVariable( curParam, buf, "curClassPoints", (tdble)newDrivers[ xx ]->classPointList[ yy ] ); GfParmSetVariable( curParam, buf, "curClassPoints", (tdble)newDrivers[ xx ]->classPointList[ yy ] );
@ -906,15 +906,15 @@ static void ReCareerNextTracks( void *subparam )
while( curResultIndex < (int)floor( (double)(xx * ( total - 1 )) / (double)( number - 1 ) + 0.5f ) + 1 ) { while( curResultIndex < (int)floor( (double)(xx * ( total - 1 )) / (double)( number - 1 ) + 0.5f ) + 1 ) {
/* Free round */ /* Free round */
snprintf( buf, 1024, "%s/%d", RM_SECT_TRACKS, curResultIndex ); snprintf( buf, sizeof(buf), "%s/%d", RM_SECT_TRACKS, curResultIndex );
GfParmSetStr( subparam, buf, RM_ATTR_NAME, "free" ); GfParmSetStr( subparam, buf, RM_ATTR_NAME, "free" );
GfParmSetStr( subparam, buf, RM_ATTR_CATEGORY, "free" ); GfParmSetStr( subparam, buf, RM_ATTR_CATEGORY, "free" );
++curResultIndex; ++curResultIndex;
} }
snprintf( buf, 1024, "%s/%s", RM_SECT_ALLOWEDTRACKS, trackEltNames[ trackIndex ] ); snprintf( buf, sizeof(buf), "%s/%s", RM_SECT_ALLOWEDTRACKS, trackEltNames[ trackIndex ] );
path = strdup( buf ); path = strdup( buf );
snprintf( buf, 1024, "%s/%d", RM_SECT_TRACKS, curResultIndex ); snprintf( buf, sizeof(buf), "%s/%d", RM_SECT_TRACKS, curResultIndex );
GfParmSetStr( subparam, buf, RM_ATTR_NAME, GfParmGetStr( subparam, path, RM_ATTR_NAME, "free" ) ); GfParmSetStr( subparam, buf, RM_ATTR_NAME, GfParmGetStr( subparam, path, RM_ATTR_NAME, "free" ) );
GfParmSetStr( subparam, buf, RM_ATTR_CATEGORY, GfParmGetStr( subparam, path, RM_ATTR_CATEGORY, "free" ) ); GfParmSetStr( subparam, buf, RM_ATTR_CATEGORY, GfParmGetStr( subparam, path, RM_ATTR_CATEGORY, "free" ) );
@ -972,7 +972,7 @@ static void ReCareerNextWrite( tCareerInfo *info )
for( zz = 0; zz < curGroupPtr->nbTeams; ++zz ) { for( zz = 0; zz < curGroupPtr->nbTeams; ++zz ) {
for( uu = 0; uu < curGroupPtr->teams[ zz ].nbDrivers; ++uu ) { for( uu = 0; uu < curGroupPtr->teams[ zz ].nbDrivers; ++uu ) {
/* Fill Drivers Section */ /* Fill Drivers Section */
snprintf( buf, 1024, "%s/%d", RM_SECT_DRIVERS, yy ); snprintf( buf, sizeof(buf), "%s/%d", RM_SECT_DRIVERS, yy );
GfParmSetStr( curParam, buf, RM_ATTR_MODULE, curGroupPtr->teams[ zz ].drivers[ uu ]->module ); GfParmSetStr( curParam, buf, RM_ATTR_MODULE, curGroupPtr->teams[ zz ].drivers[ uu ]->module );
GfParmSetNum( curParam, buf, RM_ATTR_IDX, NULL, (tdble)curGroupPtr->teams[ zz ].drivers[ uu ]->idx ); GfParmSetNum( curParam, buf, RM_ATTR_IDX, NULL, (tdble)curGroupPtr->teams[ zz ].drivers[ uu ]->idx );
GfParmSetNum( curParam, buf, RM_ATTR_EXTENDED, NULL, (tdble)curGroupPtr->teams[ zz ].drivers[ uu ]->extended ); GfParmSetNum( curParam, buf, RM_ATTR_EXTENDED, NULL, (tdble)curGroupPtr->teams[ zz ].drivers[ uu ]->extended );
@ -982,7 +982,7 @@ static void ReCareerNextWrite( tCareerInfo *info )
// pDriver->extended ? " extended" : ""); // pDriver->extended ? " extended" : "");
/* Fill Driver Info */ /* Fill Driver Info */
snprintf( buf, 1024, "%s/%s/%d/%d", RM_SECT_DRIVERINFO, curGroupPtr->teams[ zz ].drivers[ uu ]->module, snprintf( buf, sizeof(buf), "%s/%s/%d/%d", RM_SECT_DRIVERINFO, curGroupPtr->teams[ zz ].drivers[ uu ]->module,
curGroupPtr->teams[ zz ].drivers[ uu ]->extended, curGroupPtr->teams[ zz ].drivers[ uu ]->extended,
curGroupPtr->teams[ zz ].drivers[ uu ]->idx ); curGroupPtr->teams[ zz ].drivers[ uu ]->idx );
GfParmSetStr( curParam, buf, RM_ATTR_NAME, curGroupPtr->teams[ zz ].drivers[ uu ]->name ); GfParmSetStr( curParam, buf, RM_ATTR_NAME, curGroupPtr->teams[ zz ].drivers[ uu ]->name );

View file

@ -865,7 +865,7 @@ ReCarsManageCar(tCarElt *car, bool& bestLapChanged)
int result; int result;
GfLogInfo("Re-reading best lap\n"); GfLogInfo("Re-reading best lap\n");
sprintf(command, "SELECT datablob FROM car0 where lap=%d", car->_bestLap); snprintf(command, sizeof(command), "SELECT datablob FROM car0 where lap=%d", car->_bestLap);
result = sqlite3_prepare_v2(replayDB, command, -1, &ghostcarBlob, 0); result = sqlite3_prepare_v2(replayDB, command, -1, &ghostcarBlob, 0);
if (result) { if (result) {

View file

@ -73,6 +73,8 @@ static const char *aPszSkillLevelNames[] =
{ ROB_VAL_ARCADE, ROB_VAL_SEMI_ROOKIE, ROB_VAL_ROOKIE, ROB_VAL_AMATEUR, ROB_VAL_SEMI_PRO, ROB_VAL_PRO }; { ROB_VAL_ARCADE, ROB_VAL_SEMI_ROOKIE, ROB_VAL_ROOKIE, ROB_VAL_AMATEUR, ROB_VAL_SEMI_PRO, ROB_VAL_PRO };
static const int NSkillLevels = (int)(sizeof(aPszSkillLevelNames)/sizeof(char*)); static const int NSkillLevels = (int)(sizeof(aPszSkillLevelNames)/sizeof(char*));
static const size_t PathLenMax = 1024;
// The list of robot modules loaded for the race. // The list of robot modules loaded for the race.
tModList *ReRacingRobotsModList = 0; tModList *ReRacingRobotsModList = 0;
@ -95,7 +97,7 @@ ReReset(void)
ReInfo->robModList = &ReRacingRobotsModList; ReInfo->robModList = &ReRacingRobotsModList;
// Load Race engine params. // Load Race engine params.
char buf[256]; char buf[PathLenMax];
snprintf(buf, sizeof(buf), "%s%s", GfLocalDir(), RACE_ENG_CFG); snprintf(buf, sizeof(buf), "%s%s", GfLocalDir(), RACE_ENG_CFG);
ReInfo->_reParam = GfParmReadFile(buf, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT); ReInfo->_reParam = GfParmReadFile(buf, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);
} }
@ -470,10 +472,10 @@ static tCarElt* reLoadSingleCar( int carindex, int listindex, int modindex, int
{ {
tCarElt *elt; tCarElt *elt;
tMemoryPool oldPool; tMemoryPool oldPool;
char path[256]; char path[PathLenMax];
char path2[256]; char path2[PathLenMax];
char buf[256]; char buf[PathLenMax];
char buf2[256]; char buf2[PathLenMax];
char const *str; char const *str;
char const *category; char const *category;
char const *subcategory; char const *subcategory;
@ -946,12 +948,12 @@ ReInitCars(void)
int result; int result;
if (replayRecord) { if (replayRecord) {
sprintf(command, "DROP TABLE IF EXISTS car%d", i); snprintf(command, sizeof(command), "DROP TABLE IF EXISTS car%d", i);
result = sqlite3_exec(replayDB, command, 0, 0, 0); result = sqlite3_exec(replayDB, command, 0, 0, 0);
if (result) GfLogInfo("Replay: Unable to drop table car%d: %s\n", i, sqlite3_errmsg(replayDB)); if (result) GfLogInfo("Replay: Unable to drop table car%d: %s\n", i, sqlite3_errmsg(replayDB));
} }
sprintf(command, "CREATE TABLE IF NOT EXISTS car%d (timestamp, lap, datablob BLOB)", i); snprintf(command, sizeof(command), "CREATE TABLE IF NOT EXISTS car%d (timestamp, lap, datablob BLOB)", i);
result = sqlite3_exec(replayDB, command, 0, 0, 0); result = sqlite3_exec(replayDB, command, 0, 0, 0);
if (result) { if (result) {
GfLogInfo("Replay: Unable to create table car%d: %s\n", i, sqlite3_errmsg(replayDB)); GfLogInfo("Replay: Unable to create table car%d: %s\n", i, sqlite3_errmsg(replayDB));
@ -960,7 +962,7 @@ ReInitCars(void)
if (replayReplay) { if (replayReplay) {
// Build index to allow faster read access // Build index to allow faster read access
sprintf(command, "CREATE UNIQUE INDEX IF NOT EXISTS index%d ON car%d (timestamp)", i, i); snprintf(command, sizeof(command), "CREATE UNIQUE INDEX IF NOT EXISTS index%d ON car%d (timestamp)", i, i);
result = sqlite3_exec(replayDB, command, 0, 0, 0); result = sqlite3_exec(replayDB, command, 0, 0, 0);
if (result) GfLogInfo("Replay: Unable to create index car%d: %s\n", i, sqlite3_errmsg(replayDB)); if (result) GfLogInfo("Replay: Unable to create index car%d: %s\n", i, sqlite3_errmsg(replayDB));
} }

View file

@ -932,7 +932,7 @@ void ReSituationUpdater::replaySituation(tRmInfo*& pSource)
memcpy(&pTgtCar->pitcmd, &pSrcCar->pitcmd, sizeof(tCarPitCmd)); memcpy(&pTgtCar->pitcmd, &pSrcCar->pitcmd, sizeof(tCarPitCmd));
// and write to database // and write to database
sprintf(command, "INSERT INTO car%d (timestamp, lap, datablob) VALUES (%f, %d, ?)", nCarInd, snprintf(command, sizeof(command), "INSERT INTO car%d (timestamp, lap, datablob) VALUES (%f, %d, ?)", nCarInd,
pSource->s->currentTime, pSrcCar->_laps); pSource->s->currentTime, pSrcCar->_laps);
result = sqlite3_prepare_v2(replayDB, command, -1, &replayBlobs[nCarInd], 0); result = sqlite3_prepare_v2(replayDB, command, -1, &replayBlobs[nCarInd], 0);

View file

@ -730,6 +730,33 @@ reTrackInitSimuWeather(void)
if (!file.is_open()) if (!file.is_open())
{ {
GfLogError("Failed to open %s\n", weatherfile.str().c_str()); GfLogError("Failed to open %s\n", weatherfile.str().c_str());
int clouds = TR_CLOUDS_NONE;
int rain = TR_RAIN_NONE;
// Really random clouds.
clouds = rand() % (TR_CLOUDS_FULL);
// Update track local info.
trackLocal->rain = rain;
trackLocal->hail = 0;
trackLocal->snow = 0;
trackLocal->clouds = clouds;
trackLocal->cloud_altitude = 5500.0 * 0.3048;
trackLocal->water = rain;
trackLocal->airtemperature = 15.0f;
trackLocal->dewp = 5.0f;
trackLocal->airpressure = 101300;
trackLocal->airdensity = 1.219f;
trackLocal->windspeed = (tdble)(rand() % 100);
trackLocal->winddir = (tdble)(rand() % 359);
trackLocal->relativehumidity = 65.0f;
trackLocal->visibility = (tdble)(rand() % 12000);
reTrackInitWeatherValues();
if ((trackLocal->visibility < 300) & (rain < 1))
trackLocal->visibility = 300;
ReTrackUpdate();
return; return;
} }

View file

@ -70,7 +70,7 @@ int RmGetFeaturesList( void* param )
int raceFeatureMask = -1; // All bits set to 1. int raceFeatureMask = -1; // All bits set to 1.
void *robhdle; void *robhdle;
char path[ 256 ]; char path[ 1024 ];
char buf[ 1024 ]; char buf[ 1024 ];
int xx, yy; int xx, yy;
int features_index; int features_index;
@ -80,15 +80,15 @@ int RmGetFeaturesList( void* param )
for( xx = 1; xx < nCars + 1; ++xx ) for( xx = 1; xx < nCars + 1; ++xx )
{ {
/* Open robot */ /* Open robot */
sprintf( path, "%s/%d", RM_SECT_DRIVERS, xx ); snprintf( path, sizeof(path), "%s/%d", RM_SECT_DRIVERS, xx );
cardllname = GfParmGetStr( param, path, RM_ATTR_MODULE, "" ); cardllname = GfParmGetStr( param, path, RM_ATTR_MODULE, "" );
caridx = (int)GfParmGetNum( param, path, RM_ATTR_IDX, NULL, 0 ); caridx = (int)GfParmGetNum( param, path, RM_ATTR_IDX, NULL, 0 );
sprintf( buf, "%s/drivers/%s/%s.xml", GfLocalDir(), cardllname, cardllname ); snprintf( buf, sizeof(buf), "%s/drivers/%s/%s.xml", GfLocalDir(), cardllname, cardllname );
robhdle = GfParmReadFile( buf, GFPARM_RMODE_STD ); robhdle = GfParmReadFile( buf, GFPARM_RMODE_STD );
if( !robhdle ) if( !robhdle )
{ {
sprintf( buf, "drivers/%s/%s.xml", cardllname, cardllname ); snprintf( buf, sizeof(buf), "drivers/%s/%s.xml", cardllname, cardllname );
robhdle = GfParmReadFile( buf, GFPARM_RMODE_STD ); robhdle = GfParmReadFile( buf, GFPARM_RMODE_STD );
} }
@ -97,7 +97,7 @@ int RmGetFeaturesList( void* param )
driverFeatureMask = 0; driverFeatureMask = 0;
sprintf( buf, "%s/%s/%d", ROB_SECT_ROBOTS, ROB_LIST_INDEX, caridx ); snprintf( buf, sizeof(buf), "%s/%s/%d", ROB_SECT_ROBOTS, ROB_LIST_INDEX, caridx );
if( strcmp( GfParmGetStr( robhdle, buf, ROB_ATTR_TYPE, ROB_VAL_ROBOT ), ROB_VAL_HUMAN ) == 0 ) if( strcmp( GfParmGetStr( robhdle, buf, ROB_ATTR_TYPE, ROB_VAL_ROBOT ), ROB_VAL_HUMAN ) == 0 )
{ {
if( strcmp( GfParmGetStr( robhdle, buf, ROB_ATTR_LEVEL, ROB_VAL_ARCADE ), ROB_VAL_ARCADE ) == 0 ) if( strcmp( GfParmGetStr( robhdle, buf, ROB_ATTR_LEVEL, ROB_VAL_ARCADE ), ROB_VAL_ARCADE ) == 0 )
@ -117,7 +117,7 @@ int RmGetFeaturesList( void* param )
/*RM_FEATURE_SC | RM_FEATURE_YELLOW | RM_FEATURE_BLUE | RM_FEATURE_RED | RM_FEATURE_PITEXIT |*/ /*RM_FEATURE_SC | RM_FEATURE_YELLOW | RM_FEATURE_BLUE | RM_FEATURE_RED | RM_FEATURE_PITEXIT |*/
} else if( strcmp( GfParmGetStr( robhdle, buf, ROB_ATTR_TYPE, ROB_VAL_ROBOT ), ROB_VAL_ROBOT ) == 0 ) } else if( strcmp( GfParmGetStr( robhdle, buf, ROB_ATTR_TYPE, ROB_VAL_ROBOT ), ROB_VAL_ROBOT ) == 0 )
{ {
sprintf( buf, "%s/%s/%d", ROB_SECT_ROBOTS, ROB_LIST_INDEX, caridx ); snprintf( buf, sizeof(buf), "%s/%s/%d", ROB_SECT_ROBOTS, ROB_LIST_INDEX, caridx );
features = GfParmGetStr( robhdle, buf, ROB_ATTR_FEATURES, "" ); features = GfParmGetStr( robhdle, buf, ROB_ATTR_FEATURES, "" );
features_index = 0; features_index = 0;
buf_index = 0; buf_index = 0;

View file

@ -102,8 +102,8 @@ bool ReWebMetar::ReWebMetarFtp(const string& m)
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
char buffer[256]; char buffer[1024];
snprintf(buffer, 255, "%sconfig/weather.txt", GetLocalDir()); snprintf(buffer, sizeof(buffer), "%sconfig/weather.txt", GetLocalDir());
GfLogDebug("Save Weather file in = %s\n", buffer); GfLogDebug("Save Weather file in = %s\n", buffer);
GfLogDebug("URL WebMetar = %s\n", m.c_str()); GfLogDebug("URL WebMetar = %s\n", m.c_str());