207 -- platform independent way of checking for non-exisitng files |
207 -- platform independent way of checking for non-exisitng files |
208 until ok; |
208 until ok; |
209 return true; |
209 return true; |
210 end |
210 end |
211 |
211 |
212 local function list_append(username, host, datastore, data) |
212 local function append(username, host, datastore, ext, data) |
213 if not data then return; end |
213 local f, msg = io_open(getpath(username, host, datastore, ext, true), "r+"); |
214 if callback(username, host, datastore) == false then return true; end |
|
215 -- save the datastore |
|
216 local f, msg = io_open(getpath(username, host, datastore, "list", true), "r+"); |
|
217 if not f then |
214 if not f then |
218 f, msg = io_open(getpath(username, host, datastore, "list", true), "w"); |
215 f, msg = io_open(getpath(username, host, datastore, ext, true), "w"); |
219 end |
216 end |
220 if not f then |
217 if not f then |
221 log("error", "Unable to write to %s storage ('%s') for user: %s@%s", datastore, msg, username or "nil", host or "nil"); |
218 return nil, msg; |
222 return; |
219 end |
223 end |
|
224 local data = "item(" .. serialize(data) .. ");\n"; |
|
225 local pos = f:seek("end"); |
220 local pos = f:seek("end"); |
226 local ok, msg = fallocate(f, pos, #data); |
221 local ok, msg = fallocate(f, pos, #data); |
227 f:seek("set", pos); |
222 f:seek("set", pos); |
228 if ok then |
223 if ok then |
229 f:write(data); |
224 f:write(data); |
230 else |
225 else |
|
226 return ok, msg; |
|
227 end |
|
228 f:close(); |
|
229 return true; |
|
230 end |
|
231 |
|
232 local function list_append(username, host, datastore, data) |
|
233 if not data then return; end |
|
234 if callback(username, host, datastore) == false then return true; end |
|
235 -- save the datastore |
|
236 |
|
237 local data = "item(" .. serialize(data) .. ");\n"; |
|
238 local ok, msg = append(username, host, datastore, "list", data); |
|
239 if not ok then |
231 log("error", "Unable to write to %s storage ('%s') for user: %s@%s", datastore, msg, username or "nil", host or "nil"); |
240 log("error", "Unable to write to %s storage ('%s') for user: %s@%s", datastore, msg, username or "nil", host or "nil"); |
232 return ok, msg; |
241 return ok, msg; |
233 end |
242 end |
234 f:close(); |
|
235 return true; |
243 return true; |
236 end |
244 end |
237 |
245 |
238 local function list_store(username, host, datastore, data) |
246 local function list_store(username, host, datastore, data) |
239 if not data then |
247 if not data then |