Mercurial > prosody-hg
comparison util/datamanager.lua @ 5119:d868ce990838
Merge 0.9->trunk
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Wed, 12 Sep 2012 22:03:57 +0500 |
| parents | 0dc9e6c128c3 |
| children | 051d352ed03c |
comparison
equal
deleted
inserted
replaced
| 5114:4c2c04a49938 | 5119:d868ce990838 |
|---|---|
| 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; |
