util/datamanager.lua
changeset 5118 0dc9e6c128c3
parent 5103 5a1488369c35
child 5130 051d352ed03c
equal deleted inserted replaced
5117:2c7e1ce8f482 5118:0dc9e6c128c3
    23 local envloadfile = require"util.envload".envloadfile;
    23 local envloadfile = require"util.envload".envloadfile;
    24 local serialize = require "util.serialization".serialize;
    24 local serialize = require "util.serialization".serialize;
    25 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)
    25 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)
    26 local lfs = require "lfs";
    26 local lfs = require "lfs";
    27 local prosody = prosody;
    27 local prosody = prosody;
    28 local raw_mkdir;
    28 
    29 local fallocate;
    29 local raw_mkdir = lfs.mkdir;
    30 
    30 local function fallocate(f, offset, len)
    31 if prosody.platform == "posix" then
    31 	-- This assumes that current position == offset
    32 	raw_mkdir = require "util.pposix".mkdir; -- Doesn't trample on umask
    32 	local fake_data = (" "):rep(len);
    33 	fallocate = require "util.pposix".fallocate;
    33 	local ok, msg = f:write(fake_data);
    34 else
    34 	if not ok then
    35 	raw_mkdir = lfs.mkdir;
    35 		return ok, msg;
    36 end
    36 	end
    37 
    37 	f:seek("set", offset);
    38 if not fallocate then -- Fallback
    38 	return true;
    39 	function fallocate(f, offset, len)
    39 end;
    40 		-- This assumes that current position == offset
    40 pcall(function()
    41 		local fake_data = (" "):rep(len);
    41 	local pposix = require "util.pposix";
    42 		local ok, msg = f:write(fake_data);
    42 	raw_mkdir = pposix.mkdir or raw_mkdir; -- Doesn't trample on umask
    43 		if not ok then
    43 	fallocate = pposix.fallocate or fallocate;
    44 			return ok, msg;
    44 end);
    45 		end
       
    46 		f:seek("set", offset);
       
    47 		return true;
       
    48 	end
       
    49 end
       
    50 
    45 
    51 module "datamanager"
    46 module "datamanager"
    52 
    47 
    53 ---- utils -----
    48 ---- utils -----
    54 local encode, decode;
    49 local encode, decode;