Datamanager now deletes files with no data

Mon, 03 Nov 2008 07:50:09 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Mon, 03 Nov 2008 07:50:09 +0500
changeset 205
e30d0e30a0ff
parent 204
4ca91e0551b2
child 206
90c387884234

Datamanager now deletes files with no data

util/datamanager.lua file | annotate | diff | comparison | revisions
--- a/util/datamanager.lua	Mon Nov 03 07:48:39 2008 +0500
+++ b/util/datamanager.lua	Mon Nov 03 07:50:09 2008 +0500
@@ -5,8 +5,10 @@
 local loadfile, setfenv, pcall = loadfile, setfenv, pcall;
 local log = log;
 local io_open = io.open;
+local os_remove = os.remove;
 local tostring = tostring;
 local error = error;
+local next = next;
 
 local indent = function(f, i)
 	for n = 1, i do
@@ -93,14 +95,23 @@
 end
 
 function store(username, host, datastore, data)
+	if not data then
+		data = {};
+	end
+	-- save the datastore
 	local f, msg = io_open(getpath(username, host, datastore), "w+");
 	if not f then
 		log("error", "Unable to write to "..datastore.." storage ('"..msg.."') for user: "..(username or "nil").."@"..(host or "nil"));
-		return nil;
+		return;
 	end
 	f:write("return ");
 	simplesave(f, data, 1);
 	f:close();
+	if not next(data) then -- try to delete empty datastore
+		os_remove(getpath(username, host, datastore));
+	end
+	-- we write data even when we are deleting because lua doesn't have a
+	-- platform independent way of checking for non-exisitng files
 	return true;
 end
 

mercurial