From 1bb1d825f46af3562554c12fba35a31b9f7973ff Mon Sep 17 00:00:00 2001 From: orwell96 Date: Fri, 10 Jan 2020 14:08:56 +0100 Subject: Use minetest.safe_file_write() to atomically save state [Breaks MT4 compat] --- advtrains/init.lua | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/advtrains/init.lua b/advtrains/init.lua index c5604fd..ca9c52b 100644 --- a/advtrains/init.lua +++ b/advtrains/init.lua @@ -343,15 +343,12 @@ advtrains.save_component = function (tbl, name) minetest.log("error", " Failed to serialize advtrains save data!") return end - local temppath = advtrains.fpath.."_"..name.."~" - local file, err = io.open(temppath, "w") - if err then - minetest.log("error", " Failed to write advtrains save data to file "..temppath..": "..(err or "Unknown Error")) - return + local path = advtrains.fpath.."_"..name + local success = minetest.safe_file_write(path, datastr) + + if not success then + minetest.log("error", " Failed to write advtrains save data to file "..path) end - file:write(datastr) - file:close() - os.rename(temppath, advtrains.fpath.."_"..name) end -- cgit v1.2.3