From 4a200c885157d445d46e556fa366c97db9fc3aca Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Wed, 22 Nov 2017 09:33:18 +0100 Subject: [PATCH] misc.py: Add atomic_store() Signed-off-by: Jan Lindemann --- tools/python/jwutils/misc.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/python/jwutils/misc.py b/tools/python/jwutils/misc.py index f70d146..f6b991a 100644 --- a/tools/python/jwutils/misc.py +++ b/tools/python/jwutils/misc.py @@ -1,4 +1,12 @@ import os, errno +import atexit +import tempfile + +_tmpfiles = set() + +def _cleanup(): + for f in _tmpfiles: + os.unlink(f) def silentremove(filename): #export try: @@ -15,3 +23,18 @@ def pad(token, total_size, right_align = False): if right_align: return space + token return token + space + +def atomic_store(contents, path): # export + if path[0:3] == '/dev': + with open(path, 'w') as outfile: + outfile.write(contents) + return + outfile = tempfile.NamedTemporaryFile(prefix=os.path.basename(path), delete=False, dir=os.path.dirname(path)) + name = outfile.name + _tmpfiles.add(name) + outfile.write(contents) + outfile.close() + os.rename(name, path) + _tmpfiles.remove(name) + +atexit.register(_cleanup)