# HG changeset patch # User smatz # Date 2008-06-10 21:59:22 # Node ID 2873382f8f4ae2bcd2bc20b1cf778b22df4ec5c9 # Parent ae7979d51839421648bfab88db441a4bd391b49f (svn r13456) -Codechange: use AllocaM() macro instead of alloca() at most places diff --git a/src/core/alloc_func.hpp b/src/core/alloc_func.hpp --- a/src/core/alloc_func.hpp +++ b/src/core/alloc_func.hpp @@ -90,4 +90,7 @@ template FORCEINLINE T* Rea return t_ptr; } +/** alloca() has to be called in the parent function, so define AllocaM() as a macro */ +#define AllocaM(T, num_elements) ((T*)alloca((num_elements) * sizeof(T))) + #endif /* ALLOC_FUNC_HPP */ diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2946,7 +2946,7 @@ static void VehicleMapSpriteGroup(byte * } } - EngineID *engines = (EngineID*)alloca(idcount * sizeof(*engines)); + EngineID *engines = AllocaM(EngineID, idcount); for (uint i = 0; i < idcount; i++) { engines[i] = GetNewEngine(_cur_grffile, (VehicleType)feature, grf_load_byte(&buf))->index; if (!wagover) last_engines[i] = engines[i]; @@ -2996,7 +2996,7 @@ static void VehicleMapSpriteGroup(byte * static void CanalMapSpriteGroup(byte *buf, uint8 idcount) { - CanalFeature *cfs = (CanalFeature*)alloca(idcount * sizeof(*cfs)); + CanalFeature *cfs = AllocaM(CanalFeature, idcount); for (uint i = 0; i < idcount; i++) { cfs[i] = (CanalFeature)grf_load_byte(&buf); } @@ -3022,7 +3022,7 @@ static void CanalMapSpriteGroup(byte *bu static void StationMapSpriteGroup(byte *buf, uint8 idcount) { - uint8 *stations = (uint8*)alloca(idcount * sizeof(*stations)); + uint8 *stations = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { stations[i] = grf_load_byte(&buf); } @@ -3069,7 +3069,7 @@ static void StationMapSpriteGroup(byte * static void TownHouseMapSpriteGroup(byte *buf, uint8 idcount) { - uint8 *houses = (uint8*)alloca(idcount * sizeof(*houses)); + uint8 *houses = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { houses[i] = grf_load_byte(&buf); } @@ -3095,7 +3095,7 @@ static void TownHouseMapSpriteGroup(byte static void IndustryMapSpriteGroup(byte *buf, uint8 idcount) { - uint8 *industries = (uint8*)alloca(idcount * sizeof(*industries)); + uint8 *industries = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { industries[i] = grf_load_byte(&buf); } @@ -3121,7 +3121,7 @@ static void IndustryMapSpriteGroup(byte static void IndustrytileMapSpriteGroup(byte *buf, uint8 idcount) { - uint8 *indtiles = (uint8*)alloca(idcount * sizeof(*indtiles)); + uint8 *indtiles = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { indtiles[i] = grf_load_byte(&buf); } @@ -3147,7 +3147,7 @@ static void IndustrytileMapSpriteGroup(b static void CargoMapSpriteGroup(byte *buf, uint8 idcount) { - CargoID *cargos = (CargoID*)alloca(idcount * sizeof(*cargos)); + CargoID *cargos = AllocaM(CargoID, idcount); for (uint i = 0; i < idcount; i++) { cargos[i] = grf_load_byte(&buf); } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -194,7 +194,7 @@ CommandCost CmdBuildRoadVeh(TileIndex ti uint num_vehicles = 1 + CountArticulatedParts(p1, false); /* Allow for the front and the articulated parts, plus one to "terminate" the list. */ - Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1)); + Vehicle **vl = AllocaM(Vehicle*, num_vehicles + 1); memset(vl, 0, sizeof(*vl) * (num_vehicles + 1)); if (!Vehicle::AllocateList(vl, num_vehicles)) { diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1013,7 +1013,7 @@ CommandCost CmdBuildRailroadStation(Tile tile_delta = (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); track = AxisToTrack(axis); - layout_ptr = (byte*)alloca(numtracks * plat_len); + layout_ptr = AllocaM(byte, numtracks * plat_len); GetStationLayout(layout_ptr, numtracks, plat_len, statspec); numtracks_orig = numtracks; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -549,7 +549,7 @@ static CommandCost CmdBuildRailWagon(Eng if (!IsCompatibleRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR; /* Allow for the wagon and the articulated parts, plus one to "terminate" the list. */ - Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1)); + Vehicle **vl = AllocaM(Vehicle*, num_vehicles + 1); memset(vl, 0, sizeof(*vl) * (num_vehicles + 1)); if (!Vehicle::AllocateList(vl, num_vehicles)) @@ -716,7 +716,7 @@ CommandCost CmdBuildRailVehicle(TileInde if (!HasPowerOnRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR; /* Allow for the dual-heads and the articulated parts, plus one to "terminate" the list. */ - Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1)); + Vehicle **vl = AllocaM(Vehicle*, num_vehicles + 1); memset(vl, 0, sizeof(*vl) * (num_vehicles + 1)); if (!Vehicle::AllocateList(vl, num_vehicles)) { diff --git a/src/win32.cpp b/src/win32.cpp --- a/src/win32.cpp +++ b/src/win32.cpp @@ -474,7 +474,7 @@ static LONG WINAPI ExceptionHandler(EXCE _ident = GetTickCount(); // something pretty unique - MakeCRCTable((uint32*)alloca(256 * sizeof(uint32))); + MakeCRCTable(AllocaM(uint32, 256)); _crash_msg = output = (char*)LocalAlloc(LMEM_FIXED, 8192); {