Changeset

7925:209503ee3aaa

util.datamanager: Ignore ENOENT (no such file) when loading data
author Kim Alvefur <zash@zash.se>
date Wed, 01 Mar 2017 16:44:59 +0100
parents 7924:8487fe9fc335
children 7926:b009c27818c6
files util/datamanager.lua
diffstat 1 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/util/datamanager.lua	Wed Mar 01 16:42:02 2017 +0100
+++ b/util/datamanager.lua	Wed Mar 01 16:44:59 2017 +0100
@@ -39,6 +39,7 @@
 	f:seek("set", offset);
 	return true;
 end;
+local ENOENT = 2;
 pcall(function()
 	local pposix = require "util.pposix";
 	raw_mkdir = pposix.mkdir or raw_mkdir; -- Doesn't trample on umask
@@ -122,8 +123,12 @@
 end
 
 local function load(username, host, datastore)
-	local data, err = envloadfile(getpath(username, host, datastore), {});
+	local data, err, errno = envloadfile(getpath(username, host, datastore), {});
 	if not data then
+		if errno == ENOENT then
+			-- No such file, ok to ignore
+			return nil;
+		end
 		local mode = lfs.attributes(getpath(username, host, datastore), "mode");
 		if not mode then
 			log("debug", "Assuming empty %s storage ('%s') for user: %s@%s", datastore, err, username or "nil", host or "nil");
@@ -145,9 +150,9 @@
 
 local function atomic_store(filename, data)
 	local scratch = filename.."~";
-	local f, ok, msg;
+	local f, ok, msg, errno;
 
-	f, msg = io_open(scratch, "w");
+	f, msg, errno = io_open(scratch, "w");
 	if not f then
 		return nil, msg;
 	end
@@ -295,8 +300,12 @@
 
 local function list_load(username, host, datastore)
 	local items = {};
-	local data, err = envloadfile(getpath(username, host, datastore, "list"), {item = function(i) t_insert(items, i); end});
+	local data, err, errno = envloadfile(getpath(username, host, datastore, "list"), {item = function(i) t_insert(items, i); end});
 	if not data then
+		if errno == ENOENT then
+			-- No such file, ok to ignore
+			return nil;
+		end
 		local mode = lfs.attributes(getpath(username, host, datastore, "list"), "mode");
 		if not mode then
 			log("debug", "Assuming empty %s storage ('%s') for user: %s@%s", datastore, err, username or "nil", host or "nil");