wr_string(p_ptr->died_from);
+ wr_string(p_ptr->last_message ? p_ptr->last_message : "");
+
save_quick_start();
for (i = 0; i < 4; i++)
wr_s16b(p_ptr->inside_quest);
wr_s16b(p_ptr->inside_battle);
wr_byte(p_ptr->exit_bldg);
- wr_byte(p_ptr->leftbldg); /* save building leave status -KMW- */
+ wr_byte(0); /* Unused */
wr_s16b(p_ptr->oldpx);
wr_s16b(p_ptr->oldpy);
- /* Save builing rewards */
- wr_s16b(MAX_BACT);
-
- for (i = 0; i < MAX_BACT; i++) wr_s16b(p_ptr->rewards[i]);
+ /* Was number of p_ptr->rewards[] */
+ wr_s16b(0);
wr_s16b(p_ptr->mhp);
wr_s16b(p_ptr->chp);
wr_s16b(p_ptr->ele_immune);
wr_u32b(p_ptr->special_defense);
wr_byte(p_ptr->knowledge);
- wr_byte(0); /* oops */
+ wr_byte(p_ptr->autopick_autoregister);
wr_byte(0); /* oops */
wr_byte(p_ptr->action);
wr_byte(0);
wr_byte(dungeon_type);
- /*** On the surface ***/
+ /*** No saved floor (On the surface etc.) ***/
if (!p_ptr->floor_id)
{
/* No array elements */
/* Space */
wr_u32b(0L);
- wr_u32b(0L);
+ wr_u16b(0);
+ wr_byte(0);
+#ifdef JP
+# ifdef EUC
+ /* EUC kanji code */
+ wr_byte(2);
+# endif
+# ifdef SJIS
+ /* SJIS kanji code */
+ wr_byte(3);
+# endif
+#else
+ /* ASCII */
+ wr_byte(1);
+#endif
/* Write the RNG state */
wr_randomizer();
/* New savefile */
sprintf(floor_savefile, "%s.F%02d", savefile, (int)sf_ptr->savefile_id);
+ /* Grab permissions */
+ safe_setuid_grab();
+
/* Remove it */
fd_kill(floor_savefile);
+ /* Drop permissions */
+ safe_setuid_drop();
+
+
/* Attempt to save the player */
/* No file yet */
/* File type is "SAVE" */
FILE_TYPE(FILE_TYPE_SAVE);
+ /* Grab permissions */
+ safe_setuid_grab();
+
/* Create the savefile */
fd = fd_make(floor_savefile, 0644);
+ /* Drop permissions */
+ safe_setuid_drop();
+
/* File is okay */
if (fd >= 0)
{
/* Close the "fd" */
(void)fd_close(fd);
+ /* Grab permissions */
+ safe_setuid_grab();
+
/* Open the savefile */
fff = my_fopen(floor_savefile, "wb");
+ /* Drop permissions */
+ safe_setuid_drop();
+
/* Successful open */
if (fff)
{
}
/* Remove "broken" files */
- if (!ok) (void)fd_kill(floor_savefile);
+ if (!ok)
+ {
+ /* Grab permissions */
+ safe_setuid_grab();
+
+ (void)fd_kill(floor_savefile);
+
+ /* Drop permissions */
+ safe_setuid_drop();
+ }
}
if (!(mode & SLF_SECOND))