Software /
code /
prosody
Comparison
util/datamanager.lua @ 5021:85b2689dbcfe
Eliminate direct setfenv usage
author | Florian Zeitz <florob@babelmonkeys.de> |
---|---|
date | Fri, 08 Jun 2012 05:04:38 +0200 |
parent | 4452:7de17ca4de14 |
child | 5024:d25e1b9332cc |
comparison
equal
deleted
inserted
replaced
5020:ef1eb65acbba | 5021:85b2689dbcfe |
---|---|
9 | 9 |
10 local format = string.format; | 10 local format = string.format; |
11 local setmetatable, type = setmetatable, type; | 11 local setmetatable, type = setmetatable, type; |
12 local pairs, ipairs = pairs, ipairs; | 12 local pairs, ipairs = pairs, ipairs; |
13 local char = string.char; | 13 local char = string.char; |
14 local loadfile, setfenv, pcall = loadfile, setfenv, pcall; | 14 local pcall = pcall; |
15 local log = require "util.logger".init("datamanager"); | 15 local log = require "util.logger".init("datamanager"); |
16 local io_open = io.open; | 16 local io_open = io.open; |
17 local os_remove = os.remove; | 17 local os_remove = os.remove; |
18 local tostring, tonumber = tostring, tonumber; | 18 local tostring, tonumber = tostring, tonumber; |
19 local error = error; | 19 local error = error; |
20 local next = next; | 20 local next = next; |
21 local t_insert = table.insert; | 21 local t_insert = table.insert; |
22 local append = require "util.serialization".append; | 22 local append = require "util.serialization".append; |
23 local envloadfile = require"util.envload".envloadfile; | |
23 local path_separator = assert ( package.config:match ( "^([^\n]+)" ) , "package.config not in standard form" ) -- Extract directory seperator from package.config (an undocumented string that comes with lua) | 24 local path_separator = assert ( package.config:match ( "^([^\n]+)" ) , "package.config not in standard form" ) -- Extract directory seperator from package.config (an undocumented string that comes with lua) |
24 local lfs = require "lfs"; | 25 local lfs = require "lfs"; |
25 local prosody = prosody; | 26 local prosody = prosody; |
26 local raw_mkdir; | 27 local raw_mkdir; |
27 | 28 |
109 return format("%s/%s.%s", data_path, datastore, ext); | 110 return format("%s/%s.%s", data_path, datastore, ext); |
110 end | 111 end |
111 end | 112 end |
112 | 113 |
113 function load(username, host, datastore) | 114 function load(username, host, datastore) |
114 local data, ret = loadfile(getpath(username, host, datastore)); | 115 local data, ret = envloadfile(getpath(username, host, datastore), {}); |
115 if not data then | 116 if not data then |
116 local mode = lfs.attributes(getpath(username, host, datastore), "mode"); | 117 local mode = lfs.attributes(getpath(username, host, datastore), "mode"); |
117 if not mode then | 118 if not mode then |
118 log("debug", "Assuming empty "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); | 119 log("debug", "Assuming empty "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
119 return nil; | 120 return nil; |
121 -- TODO more detailed error checking and logging? | 122 -- TODO more detailed error checking and logging? |
122 log("error", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); | 123 log("error", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
123 return nil, "Error reading storage"; | 124 return nil, "Error reading storage"; |
124 end | 125 end |
125 end | 126 end |
126 setfenv(data, {}); | 127 |
127 local success, ret = pcall(data); | 128 local success, ret = pcall(data); |
128 if not success then | 129 if not success then |
129 log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); | 130 log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
130 return nil, "Error reading storage"; | 131 return nil, "Error reading storage"; |
131 end | 132 end |
201 -- platform independent way of checking for non-exisitng files | 202 -- platform independent way of checking for non-exisitng files |
202 return true; | 203 return true; |
203 end | 204 end |
204 | 205 |
205 function list_load(username, host, datastore) | 206 function list_load(username, host, datastore) |
206 local data, ret = loadfile(getpath(username, host, datastore, "list")); | 207 local items = {}; |
208 local data, ret = envloadfile(getpath(username, host, datastore, "list"), {item = function(i) t_insert(items, i); end}); | |
207 if not data then | 209 if not data then |
208 local mode = lfs.attributes(getpath(username, host, datastore, "list"), "mode"); | 210 local mode = lfs.attributes(getpath(username, host, datastore, "list"), "mode"); |
209 if not mode then | 211 if not mode then |
210 log("debug", "Assuming empty "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); | 212 log("debug", "Assuming empty "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
211 return nil; | 213 return nil; |
213 -- TODO more detailed error checking and logging? | 215 -- TODO more detailed error checking and logging? |
214 log("error", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); | 216 log("error", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
215 return nil, "Error reading storage"; | 217 return nil, "Error reading storage"; |
216 end | 218 end |
217 end | 219 end |
218 local items = {}; | 220 |
219 setfenv(data, {item = function(i) t_insert(items, i); end}); | |
220 local success, ret = pcall(data); | 221 local success, ret = pcall(data); |
221 if not success then | 222 if not success then |
222 log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); | 223 log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
223 return nil, "Error reading storage"; | 224 return nil, "Error reading storage"; |
224 end | 225 end |