mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 05:25:14 +00:00
Fixed crashes on 32-bit due to pointer offsets
This commit is contained in:
parent
2c95b8bff3
commit
0098b0c472
2 changed files with 11 additions and 9 deletions
|
@ -114,8 +114,8 @@ void network_send_join(struct Packet* joinRequestPacket) {
|
||||||
char nullchar = '\0';
|
char nullchar = '\0';
|
||||||
while (node != NULL && node->string != NULL) {
|
while (node != NULL && node->string != NULL) {
|
||||||
int length = strlen(node->string);
|
int length = strlen(node->string);
|
||||||
packet_write(&p, node->string, sizeof(char) * length);
|
packet_write(&p, node->string, sizeof(u8) * length);
|
||||||
packet_write(&p, &nullchar, sizeof(char));
|
packet_write(&p, &nullchar, sizeof(u8));
|
||||||
LOG_INFO("sending registered mod: %s", node->string);
|
LOG_INFO("sending registered mod: %s", node->string);
|
||||||
node = node->next;
|
node = node->next;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,18 +23,18 @@
|
||||||
|
|
||||||
static s16* get_respawn_info_from_macro_offset(u16 areaIndex, u16 macroOffset) {
|
static s16* get_respawn_info_from_macro_offset(u16 areaIndex, u16 macroOffset) {
|
||||||
// loop through macro objects for santiziation
|
// loop through macro objects for santiziation
|
||||||
u16 maxOffset = 0;
|
u16 index = 0;
|
||||||
s16* macroObjList = gAreaData[areaIndex].macroObjects;
|
s16* macroObjList = gAreaData[areaIndex].macroObjects;
|
||||||
while (macroObjList != NULL && *macroObjList != -1) {
|
while (macroObjList != NULL && *macroObjList != -1) {
|
||||||
macroObjList += 4;
|
macroObjList += 4;
|
||||||
s16* respawnInfo = macroObjList++;
|
s16* respawnInfo = macroObjList++;
|
||||||
maxOffset = respawnInfo - gAreaData[areaIndex].macroObjects;
|
if (macroOffset == index) {
|
||||||
|
return respawnInfo;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// sanitize array
|
return NULL;
|
||||||
if (macroOffset > maxOffset) { return NULL; }
|
|
||||||
|
|
||||||
return gAreaData[areaIndex].macroObjects + macroOffset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32* get_respawn_info_from_spawn_info_index(u16 areaIndex, u16 fromSpawnInfoIndex) {
|
static u32* get_respawn_info_from_spawn_info_index(u16 areaIndex, u16 fromSpawnInfoIndex) {
|
||||||
|
@ -56,6 +56,7 @@ static u32* get_respawn_info_from_spawn_info_index(u16 areaIndex, u16 fromSpawnI
|
||||||
static u16 get_macro_offset_of_object(struct Object* o) {
|
static u16 get_macro_offset_of_object(struct Object* o) {
|
||||||
// loop through macro objects to find object
|
// loop through macro objects to find object
|
||||||
s16* macroObjList = gCurrentArea->macroObjects;
|
s16* macroObjList = gCurrentArea->macroObjects;
|
||||||
|
u16 index = 0;
|
||||||
while (macroObjList != NULL && *macroObjList != -1) {
|
while (macroObjList != NULL && *macroObjList != -1) {
|
||||||
// grab preset ID
|
// grab preset ID
|
||||||
s32 presetID = (*macroObjList & 0x1FF) - 31; // Preset identifier for MacroObjectPresets array
|
s32 presetID = (*macroObjList & 0x1FF) - 31; // Preset identifier for MacroObjectPresets array
|
||||||
|
@ -66,8 +67,9 @@ static u16 get_macro_offset_of_object(struct Object* o) {
|
||||||
s16* respawnInfo = macroObjList++;
|
s16* respawnInfo = macroObjList++;
|
||||||
|
|
||||||
if (o->respawnInfo == respawnInfo) {
|
if (o->respawnInfo == respawnInfo) {
|
||||||
return (respawnInfo - gCurrentArea->macroObjects);
|
return index;
|
||||||
}
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ERR_COULD_NOT_FIND_OBJECT;
|
return ERR_COULD_NOT_FIND_OBJECT;
|
||||||
|
|
Loading…
Reference in a new issue