/*! * @brief セーブデータ書き込みのメインルーチン / * Attempt to save the player in a savefile * @return 成功すればtrue */ bool save_player(void) { int result = FALSE; char safe[1024]; #ifdef SET_UID # ifdef SECURE /* Get "games" permissions */ beGames(); # endif #endif /* New savefile */ strcpy(safe, savefile); strcat(safe, ".new"); #ifdef VM /* Hack -- support "flat directory" usage on VM/ESA */ strcpy(safe, savefile); strcat(safe, "n"); #endif /* VM */ /* Grab permissions */ safe_setuid_grab(); /* Remove it */ fd_kill(safe); /* Drop permissions */ safe_setuid_drop(); update_playtime(); /* Attempt to save the player */ if (save_player_aux(safe)) { char temp[1024]; /* Old savefile */ strcpy(temp, savefile); strcat(temp, ".old"); #ifdef VM /* Hack -- support "flat directory" usage on VM/ESA */ strcpy(temp, savefile); strcat(temp, "o"); #endif /* VM */ /* Grab permissions */ safe_setuid_grab(); /* Remove it */ fd_kill(temp); /* Preserve old savefile */ fd_move(savefile, temp); /* Activate new savefile */ fd_move(safe, savefile); /* Remove preserved savefile */ fd_kill(temp); /* Drop permissions */ safe_setuid_drop(); /* Hack -- Pretend the character was loaded */ character_loaded = TRUE; #ifdef VERIFY_SAVEFILE /* Lock on savefile */ strcpy(temp, savefile); strcat(temp, ".lok"); /* Grab permissions */ safe_setuid_grab(); /* Remove lock file */ fd_kill(temp); /* Drop permissions */ safe_setuid_drop(); #endif /* Success */ result = TRUE; } #ifdef SET_UID # ifdef SECURE /* Drop "games" permissions */ bePlayer(); # endif #endif /* Return the result */ return (result); }
/* * Attempt to save the player in a savefile */ bool save_player(void) { int result = FALSE; char safe[1024]; // in final deployment versions, you cannot save in the tutorial if (DEPLOYMENT && p_ptr->game_type != 0) { return (FALSE); } /* New savefile */ my_strcpy(safe, savefile, sizeof(safe)); my_strcat(safe, ".new", sizeof(safe)); #ifdef VM /* Hack -- support "flat directory" usage on VM/ESA */ my_strcpy(safe, savefile, sizeof(safe)); my_strcat(safe, "n", sizeof(safe)); #endif /* VM */ /* Grab permissions */ safe_setuid_grab(); /* Remove it */ fd_kill(safe); /* Drop permissions */ safe_setuid_drop(); /* Attempt to save the player */ if (save_player_aux(safe)) { char temp[1024]; /* Old savefile */ my_strcpy(temp, savefile, sizeof(temp)); my_strcat(temp, ".old", sizeof(temp)); #ifdef VM /* Hack -- support "flat directory" usage on VM/ESA */ my_strcpy(temp, savefile, sizeof(temp)); my_strcat(temp, "o", sizeof(temp)); #endif /* VM */ /* Grab permissions */ safe_setuid_grab(); /* Remove it */ fd_kill(temp); /* Preserve old savefile */ fd_move(savefile, temp); /* Activate new savefile */ fd_move(safe, savefile); /* Remove preserved savefile */ fd_kill(temp); /* Drop permissions */ safe_setuid_drop(); /* Hack -- Pretend the character was loaded */ character_loaded = TRUE; #ifdef VERIFY_SAVEFILE /* Lock on savefile */ my_strcpy(temp, savefile, sizeof(temp)); my_strcat(temp, ".lok", sizeof(temp)); /* Grab permissions */ safe_setuid_grab(); /* Remove lock file */ fd_kill(temp); /* Drop permissions */ safe_setuid_drop(); #endif /* VERIFY_SAVEFILE */ /* Success */ result = TRUE; } /* Return the result */ return (result); }