[Fix] Fixed a possible cargo id collision.

This commit is contained in:
Allanis 2014-03-15 00:24:21 +00:00
parent 75c6d9f11f
commit 22e5393f0c

View File

@ -30,7 +30,9 @@
/* ID generators. */ /* ID generators. */
static unsigned int pilot_id = PLAYER_ID; /**< Stack of pilod ids to assure uniqueness. */ static unsigned int pilot_id = PLAYER_ID; /**< Stack of pilod ids to assure uniqueness. */
static unsigned int mission_cargo_id = 0; /**< ID generator for specail mission cargo. */ static unsigned int mission_cargo_id = 0; /**< ID generator for special mission cargo.
Not garanteed to be absolutely unique,
only unique for each pilot. */
/* Stack of pilots. */ /* Stack of pilots. */
Pilot** pilot_stack = NULL; /**< Not static, it is used in player.c and weapon.c and ai.c */ Pilot** pilot_stack = NULL; /**< Not static, it is used in player.c and weapon.c and ai.c */
@ -1222,21 +1224,38 @@ static void pilot_calcCargo(Pilot* pilot) {
* @return The mission cargo ID of created cargo. * @return The mission cargo ID of created cargo.
*/ */
unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity) { unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity) {
int i;
unsigned int id, max_id;
int q; int q;
q = quantity; q = quantity;
/* Get ID. */
id = ++mission_cargo_id;
/* Check for collisions with pilot and set ID generator to the max. */
max_id = 0;
for(i = 0; i < pilot->ncommodities; i++)
if(pilot->commodities[i].id > max_id)
max_id = pilot->commodities[i].id;
if(max_id > id)
mission_cargo_id = max_id;
id = ++mission_cargo_id;
/* Grow commodities. */
pilot->commodities = realloc(pilot->commodities, pilot->commodities = realloc(pilot->commodities,
sizeof(PilotCommodity) * (pilot->ncommodities+1)); sizeof(PilotCommodity) * (pilot->ncommodities+1));
pilot->commodities[pilot->ncommodities].commodity = cargo; pilot->commodities[pilot->ncommodities].commodity = cargo;
/* Add commodity. */
if(pilot_cargoFree(pilot) < quantity) if(pilot_cargoFree(pilot) < quantity)
q = pilot_cargoFree(pilot); q = pilot_cargoFree(pilot);
pilot->commodities[pilot->ncommodities].id = ++mission_cargo_id; pilot->commodities[pilot->ncommodities].id = id;
pilot->commodities[pilot->ncommodities].quantity = q; pilot->commodities[pilot->ncommodities].quantity = q;
/* Postfixing. */
pilot->cargo_free -= q; pilot->cargo_free -= q;
pilot->solid->mass += q; pilot->solid->mass += q;
pilot->ncommodities++; pilot->ncommodities++;
return pilot->commodities[pilot->ncommodities-1].id; return id;
} }
/** /**