summaryrefslogtreecommitdiffhomepage
path: root/libs/core
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-06-01 12:12:18 +0000
committerSteven Barth <steven@midlink.org>2008-06-01 12:12:18 +0000
commitb454395a8da4013aff2ecd64cd7eafc01fc6a5a2 (patch)
tree0071604ca65f1e520ee2f56b6cf6343bc5297df9 /libs/core
parent1da5feb9f720fd48a886aad09df91bd8cc9df4c8 (diff)
* Performance optimizations
* libs/core: Added bytecode stripping function to luci.util * libs/core: Added smart indexcache that automatically updates cached index-files on change * libs/web: Enabled template caching support * Core Translation part 4
Diffstat (limited to 'libs/core')
-rw-r--r--libs/core/luasrc/fs.lua1
-rw-r--r--libs/core/luasrc/util.lua72
2 files changed, 73 insertions, 0 deletions
diff --git a/libs/core/luasrc/fs.lua b/libs/core/luasrc/fs.lua
index 5c1f2a051..35b8289af 100644
--- a/libs/core/luasrc/fs.lua
+++ b/libs/core/luasrc/fs.lua
@@ -27,6 +27,7 @@ limitations under the License.
module("luci.fs", package.seeall)
require("posix")
+posix.umask("rwx------")
-- Glob
glob = posix.glob
diff --git a/libs/core/luasrc/util.lua b/libs/core/luasrc/util.lua
index 0559fff6f..0a30b163a 100644
--- a/libs/core/luasrc/util.lua
+++ b/libs/core/luasrc/util.lua
@@ -96,6 +96,13 @@ function contains(table, value)
end
+-- Dumps and strips a Lua-Function
+function dump(f)
+ local d = string.dump(f)
+ return d and strip_bytecode(d)
+end
+
+
-- Dumps a table to stdout (useful for testing and debugging)
function dumptable(t, i)
i = i or 0
@@ -181,12 +188,77 @@ function split(str, pat, max, regex)
return t
end
+
+-- Bytecode stripping function by Peter Cawley from http://lua-users.org/lists/lua-l/2008-02/msg01158.html
+function strip_bytecode(dump)
+ local version, format, endian, int, size, ins, num = dump:byte(5, 11)
+ local subint
+ if endian == 1 then
+ subint = function(dump, i, l)
+ local val = 0
+ for n = l, 1, -1 do
+ val = val * 256 + dump:byte(i + n - 1)
+ end
+ return val, i + l
+ end
+ else
+ subint = function(dump, i, l)
+ local val = 0
+ for n = 1, l, 1 do
+ val = val * 256 + dump:byte(i + n - 1)
+ end
+ return val, i + l
+ end
+ end
+
+ local strip_function
+ strip_function = function(dump)
+ local count, offset = subint(dump, 1, size)
+ local stripped, dirty = string.rep("\0", size), offset + count
+ offset = offset + count + int * 2 + 4
+ offset = offset + int + subint(dump, offset, int) * ins
+ count, offset = subint(dump, offset, int)
+ for n = 1, count do
+ local t
+ t, offset = subint(dump, offset, 1)
+ if t == 1 then
+ offset = offset + 1
+ elseif t == 4 then
+ offset = offset + size + subint(dump, offset, size)
+ elseif t == 3 then
+ offset = offset + num
+ end
+ end
+ count, offset = subint(dump, offset, int)
+ stripped = stripped .. dump:sub(dirty, offset - 1)
+ for n = 1, count do
+ local proto, off = strip_function(dump:sub(offset, -1))
+ stripped, offset = stripped .. proto, offset + off - 1
+ end
+ offset = offset + subint(dump, offset, int) * int + int
+ count, offset = subint(dump, offset, int)
+ for n = 1, count do
+ offset = offset + subint(dump, offset, size) + size + int * 2
+ end
+ count, offset = subint(dump, offset, int)
+ for n = 1, count do
+ offset = offset + subint(dump, offset, size) + size
+ end
+ stripped = stripped .. string.rep("\0", int * 3)
+ return stripped, offset
+ end
+
+ return dump:sub(1,12) .. strip_function(dump:sub(13,-1))
+end
+
+
-- Removes whitespace from beginning and end of a string
function trim(str)
local s = str:gsub("^%s*(.-)%s*$", "%1")
return s
end
+
-- Updates given table with new values
function update(t, updates)
for k, v in pairs(updates) do