comparison arogue7/state.c @ 166:9b5f1e6aa35a

arogue7, xrogue: fix uninitialized variables when restoring. The save and restore code assumed sizeof(long) == 4, which is not the case on x64. Reading only 4 bytes from the savefile left the others uninitialized, which led to problems like billions of experience points or gold pieces.
author John "Elwin" Edwards
date Fri, 26 Jun 2015 11:42:02 -0400
parents 1af259ac4ed2
children aa8e1fc62926
comparison
equal deleted inserted replaced
165:2d94c32a709e 166:9b5f1e6aa35a
547 bytes[1] = buf[2]; 547 bytes[1] = buf[2];
548 bytes[0] = buf[3]; 548 bytes[0] = buf[3];
549 buf = bytes; 549 buf = bytes;
550 } 550 }
551 551
552 *i = *((long *) buf); 552 if (sizeof(long) == 8)
553 *i = *((int *) buf);
554 else
555 *i = *((long *) buf);
553 556
554 return(READSTAT); 557 return(READSTAT);
555 } 558 }
556 559
557 int 560 int
639 bytes[1] = buf[2]; 642 bytes[1] = buf[2];
640 bytes[0] = buf[3]; 643 bytes[0] = buf[3];
641 buf = bytes; 644 buf = bytes;
642 } 645 }
643 646
644 *i = *((unsigned long *) buf); 647 if ( (sizeof(long) == 8) && (sizeof(int) == 4) )
648 *i = *((unsigned int *) buf);
649 else
650 *i = *((unsigned long *) buf);
645 651
646 return(READSTAT); 652 return(READSTAT);
647 } 653 }
648 654
649 int 655 int