Software /
code /
prosody
Comparison
util/datamanager.lua @ 7207:14ea924a036d
Merge 0.10->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 28 Feb 2016 15:06:56 +0100 |
parent | 7202:5bf0ff3882aa |
child | 7432:92f721226753 |
comparison
equal
deleted
inserted
replaced
7195:39b7ea9141c0 | 7207:14ea924a036d |
---|---|
142 end | 142 end |
143 | 143 |
144 local function atomic_store(filename, data) | 144 local function atomic_store(filename, data) |
145 local scratch = filename.."~"; | 145 local scratch = filename.."~"; |
146 local f, ok, msg; | 146 local f, ok, msg; |
147 repeat | 147 |
148 f, msg = io_open(scratch, "w"); | 148 f, msg = io_open(scratch, "w"); |
149 if not f then break end | 149 if not f then |
150 | 150 return nil, msg; |
151 ok, msg = f:write(data); | 151 end |
152 if not ok then break end | 152 |
153 | 153 ok, msg = f:write(data); |
154 ok, msg = f:close(); | 154 if not ok then |
155 if not ok then break end | 155 f:close(); |
156 | 156 os_remove(scratch); |
157 return os_rename(scratch, filename); | 157 return nil, msg; |
158 until false; | 158 end |
159 | 159 |
160 -- Cleanup | 160 ok, msg = f:close(); |
161 if f then f:close(); end | 161 if not ok then |
162 os_remove(scratch); | 162 os_remove(scratch); |
163 return nil, msg; | 163 return nil, msg; |
164 end | |
165 | |
166 return os_rename(scratch, filename); | |
164 end | 167 end |
165 | 168 |
166 if prosody and prosody.platform ~= "posix" then | 169 if prosody and prosody.platform ~= "posix" then |
167 -- os.rename does not overwrite existing files on Windows | 170 -- os.rename does not overwrite existing files on Windows |
168 -- TODO We could use Transactional NTFS on Vista and above | 171 -- TODO We could use Transactional NTFS on Vista and above |