comparison urogue/state.c @ 258:2908dc47f9e2

UltraRogue: fix crash when restoring. The r_flags field in struct room was being written as an int and read as a short. This caused the restore functions to receive the wrong data, usually an impossible string length, and abort. This breaks save compatibility, though the save files had problems anyway: the r_fires field should have been used, instead of reading and writing r_flags twice.
author John "Elwin" Edwards
date Wed, 08 Feb 2017 19:50:36 -0500
parents c495a4f288c6
children 096d3cfd9afd
comparison
equal deleted inserted replaced
257:c4b12d2d1dcd 258:2908dc47f9e2
348 for(i=0; i<MAXDOORS; i++) 348 for(i=0; i<MAXDOORS; i++)
349 ur_write_coord(savef, r->r_exit[i]); 349 ur_write_coord(savef, r->r_exit[i]);
350 350
351 ur_write_int(savef, r->r_flags); 351 ur_write_int(savef, r->r_flags);
352 ur_write_int(savef, r->r_nexits); 352 ur_write_int(savef, r->r_nexits);
353 ur_write_int(savef, r->r_flags); 353 ur_write_short(savef, r->r_fires);
354 } 354 }
355 355
356 struct room * 356 struct room *
357 ur_read_room(FILE *savef) 357 ur_read_room(FILE *savef)
358 { 358 {
367 for(i=0; i<MAXDOORS; i++) 367 for(i=0; i<MAXDOORS; i++)
368 r->r_exit[i] = ur_read_coord(savef); 368 r->r_exit[i] = ur_read_coord(savef);
369 369
370 r->r_flags = ur_read_int(savef); 370 r->r_flags = ur_read_int(savef);
371 r->r_nexits = ur_read_int(savef); 371 r->r_nexits = ur_read_int(savef);
372 r->r_flags = ur_read_short(savef); 372 r->r_fires = ur_read_short(savef);
373 373
374 return(r); 374 return(r);
375 } 375 }
376 376
377 void 377 void