diff --git a/src/modules/racing/standardgame/racecareer.cpp b/src/modules/racing/standardgame/racecareer.cpp index 6bd97b2b4..7552641f9 100644 --- a/src/modules/racing/standardgame/racecareer.cpp +++ b/src/modules/racing/standardgame/racecareer.cpp @@ -139,7 +139,7 @@ static void ReCareerNewResultXml( const char* filename, double date ) { void *results; - snprintf( buf, 1024, filename, "results", "", "", "", "" ); + snprintf( buf, sizeof(buf), filename, "results", "", "", "", "" ); ReInfo->results = GfParmReadFile( buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT ); results = ReInfo->results; @@ -159,7 +159,7 @@ static void ReCareerNewResult( const char* filename, const char *suffix, const c { 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 ); 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, (int)GfParmGetCurNum(ReInfo->params, RM_SECT_DRIVERS, RM_ATTR_IDX, 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"); 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, 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_IDX, NULL, 1 ), 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 */ 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 ); GfParmSetStr(curParam, path2, RM_ATTR_MODULE, "simplix"); GfParmSetNum(curParam, path2, RM_ATTR_IDX, NULL, (tdble)xx); GfParmSetNum(curParam, path2, RM_ATTR_EXTENDED, NULL, 1); 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 ); - 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") ); GfParmSetStr(curParam, path2, RM_ATTR_NAME, buf); 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 ) ); /* 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 ); free(path2); @@ -289,7 +289,7 @@ static void ReCareerNewAddTeams( void *curParam, void *curResult, int curIndex, GfParmListSeekFirst( curParam, RM_SECT_TEAMS ); do { 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 ); if( GfParmIsFormula( curParam, RM_SECT_TEAMS, RM_ATTR_CARNAME ) == 0 ) 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; /* 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 ); - strncpy( buf, GfParmGetName(param), 1024 ); - ReCareerUtilManipString( buf, groupNumber, 1024 ); + snprintf( buf, sizeof(buf), "%s", GfParmGetName(param) ); + ReCareerUtilManipString( buf, groupNumber, sizeof(buf) ); GfParmWriteFile( params_filename, param, buf ); subparam = GfParmReadFile( params_filename, GFPARM_RMODE_STD ); free( params_filename ); @@ -378,16 +378,16 @@ static void* ReCareerNewGroup( const char *filename, void *param, const char *gr /* Set name and description */ 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 ); - 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 ); GfParmRemoveVariable( subparam, RM_SECT_HEADER, "number" ); /* Set that it is not the last subfile */ GfParmSetStr( subparam, RM_SECT_SUBFILES, RM_ATTR_LASTSUBFILE, RM_VAL_NO ); 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_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; /* 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 ); if( !subparam ) { 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 */ 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) ) totalTracks = (int)GfParmGetNum(ReInfo->params, buf, RM_ATTR_MAXNUM, NULL, 1); } while( GfParmListSeekNext(ReInfo->params, RM_SECT_CLASSES) == 0 ); @@ -513,7 +513,7 @@ void ReCareerNew() t = time(NULL); 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 ); filename = strdup(buf); // Makes it possible to reuse buf 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 ]->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 ); - 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 ]->skill = GfParmGetNum( curParam, buf, RM_ATTR_SKILLLEVEL, NULL, 5.0f ); newDrivers[ xx ]->classPointList = (double*)malloc( sizeof( double ) * info->nbClasses ); @@ -622,7 +622,7 @@ void ReCareerNextAddDrivers( tDriverInfo ***drivers, int *listLength, tCareerInf /* Get class points */ 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 ) { 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 ) { - 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 ) ); GfParmSetVariable( curParam, buf, "curClassPos", (tdble)classPosition[ xx - *listLength ][ 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 ) { /* 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_CATEGORY, "free" ); ++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 ); - 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_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( uu = 0; uu < curGroupPtr->teams[ zz ].nbDrivers; ++uu ) { /* 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 ); 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 ); @@ -982,7 +982,7 @@ static void ReCareerNextWrite( tCareerInfo *info ) // pDriver->extended ? " extended" : ""); /* 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 ]->idx ); GfParmSetStr( curParam, buf, RM_ATTR_NAME, curGroupPtr->teams[ zz ].drivers[ uu ]->name ); diff --git a/src/modules/racing/standardgame/racecars.cpp b/src/modules/racing/standardgame/racecars.cpp index 970252099..be510be0a 100644 --- a/src/modules/racing/standardgame/racecars.cpp +++ b/src/modules/racing/standardgame/racecars.cpp @@ -865,7 +865,7 @@ ReCarsManageCar(tCarElt *car, bool& bestLapChanged) int result; 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); if (result) { diff --git a/src/modules/racing/standardgame/raceinit.cpp b/src/modules/racing/standardgame/raceinit.cpp index 02f90f66e..671ce78d5 100644 --- a/src/modules/racing/standardgame/raceinit.cpp +++ b/src/modules/racing/standardgame/raceinit.cpp @@ -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 }; static const int NSkillLevels = (int)(sizeof(aPszSkillLevelNames)/sizeof(char*)); +static const size_t PathLenMax = 1024; + // The list of robot modules loaded for the race. tModList *ReRacingRobotsModList = 0; @@ -95,7 +97,7 @@ ReReset(void) ReInfo->robModList = &ReRacingRobotsModList; // Load Race engine params. - char buf[256]; + char buf[PathLenMax]; snprintf(buf, sizeof(buf), "%s%s", GfLocalDir(), RACE_ENG_CFG); 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; tMemoryPool oldPool; - char path[256]; - char path2[256]; - char buf[256]; - char buf2[256]; + char path[PathLenMax]; + char path2[PathLenMax]; + char buf[PathLenMax]; + char buf2[PathLenMax]; char const *str; char const *category; char const *subcategory; @@ -946,12 +948,12 @@ ReInitCars(void) int result; 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); 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); if (result) { GfLogInfo("Replay: Unable to create table car%d: %s\n", i, sqlite3_errmsg(replayDB)); @@ -960,7 +962,7 @@ ReInitCars(void) if (replayReplay) { // 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); if (result) GfLogInfo("Replay: Unable to create index car%d: %s\n", i, sqlite3_errmsg(replayDB)); } diff --git a/src/modules/racing/standardgame/racesituation.cpp b/src/modules/racing/standardgame/racesituation.cpp index a46d080e6..1070877d5 100644 --- a/src/modules/racing/standardgame/racesituation.cpp +++ b/src/modules/racing/standardgame/racesituation.cpp @@ -932,7 +932,7 @@ void ReSituationUpdater::replaySituation(tRmInfo*& pSource) memcpy(&pTgtCar->pitcmd, &pSrcCar->pitcmd, sizeof(tCarPitCmd)); // 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); result = sqlite3_prepare_v2(replayDB, command, -1, &replayBlobs[nCarInd], 0); diff --git a/src/modules/racing/standardgame/racetrack.cpp b/src/modules/racing/standardgame/racetrack.cpp index 8cd459f94..3502de544 100644 --- a/src/modules/racing/standardgame/racetrack.cpp +++ b/src/modules/racing/standardgame/racetrack.cpp @@ -730,6 +730,33 @@ reTrackInitSimuWeather(void) if (!file.is_open()) { 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; } diff --git a/src/modules/racing/standardgame/raceutil.cpp b/src/modules/racing/standardgame/raceutil.cpp index 6f2ef111e..789120dbf 100644 --- a/src/modules/racing/standardgame/raceutil.cpp +++ b/src/modules/racing/standardgame/raceutil.cpp @@ -70,7 +70,7 @@ int RmGetFeaturesList( void* param ) int raceFeatureMask = -1; // All bits set to 1. void *robhdle; - char path[ 256 ]; + char path[ 1024 ]; char buf[ 1024 ]; int xx, yy; int features_index; @@ -80,15 +80,15 @@ int RmGetFeaturesList( void* param ) for( xx = 1; xx < nCars + 1; ++xx ) { /* 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, "" ); 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 ); 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 ); } @@ -97,7 +97,7 @@ int RmGetFeaturesList( void* param ) 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_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 |*/ } 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_index = 0; buf_index = 0; diff --git a/src/modules/racing/standardgame/racewebmetar.cpp b/src/modules/racing/standardgame/racewebmetar.cpp index 98e9e9693..b18bd161d 100755 --- a/src/modules/racing/standardgame/racewebmetar.cpp +++ b/src/modules/racing/standardgame/racewebmetar.cpp @@ -102,8 +102,8 @@ bool ReWebMetar::ReWebMetarFtp(const string& m) CURL *curl; CURLcode res; - char buffer[256]; - snprintf(buffer, 255, "%sconfig/weather.txt", GetLocalDir()); + char buffer[1024]; + snprintf(buffer, sizeof(buffer), "%sconfig/weather.txt", GetLocalDir()); GfLogDebug("Save Weather file in = %s\n", buffer); GfLogDebug("URL WebMetar = %s\n", m.c_str());