X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fuvl%2Fluasrc%2Fuvl.lua;h=3b5b854c9b60791bafcce7d92e6adaf02fa91189;hp=dd8058f03b0e84e79616b9ab2b2d7b50b4478b03;hb=3efff022f21d115f6f5b9c5474700e26a51d85a0;hpb=14c485e11719f2385f01397f7d7eeeed9ed460ea diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua index dd8058f03..3b5b854c9 100644 --- a/libs/uvl/luasrc/uvl.lua +++ b/libs/uvl/luasrc/uvl.lua @@ -19,15 +19,16 @@ $Id$ -- @class module -- @cstyle instance -local fs = require "luci.fs" +local fs = require "nixio.fs" local uci = require "luci.model.uci" local util = require "luci.util" +local nutil = require "nixio.util" local table = require "table" local string = require "string" local require, pcall, ipairs, pairs = require, pcall, ipairs, pairs local type, error, tonumber, tostring = type, error, tonumber, tostring -local unpack, loadfile = unpack, loadfile +local unpack, loadfile, collectgarbage = unpack, loadfile, collectgarbage module "luci.uvl" @@ -42,6 +43,10 @@ local TYPE_SECTION = 0x02 local TYPE_OPTION = 0x03 local TYPE_ENUM = 0x04 +local PAT_EXPR1 = "^%$?[%w_]+$" +local PAT_EXPR2 = "^%$?[%w_]+%.%$?[%w_]+$" +local PAT_EXPR3 = "^%$?[%w_]+%.%$?[%w_]+%.%$?[%w_]+$" + --- Boolean; default true; -- treat sections found in config but not in scheme as error STRICT_UNKNOWN_SECTIONS = true @@ -273,7 +278,7 @@ function UVL._validate_section( self, section ) if STRICT_UNKNOWN_OPTIONS and not section:scheme('dynamic') then for k, v in pairs(section:config()) do local oo = section:option(k) - if k:sub(1,1) ~= "." and not self.beenthere[oo:cid()] then + if k:byte(1) == 46 and not self.beenthere[oo:cid()] then section:error(ERR.OPT_UNKNOWN(oo)) end end @@ -403,11 +408,11 @@ function UVL.read_scheme( self, shm, alias ) local bc = "%s/bytecode/%s.lua" %{ self.schemedir, shm } if not fs.access(bc) then - local files = fs.glob(self.schemedir .. '/*/' .. shm) + local files = nutil.consume((fs.glob(self.schemedir .. '/*/' .. shm))) - if files then + if #files > 0 then local ok, err - for i, file in ipairs( files ) do + for _, file in ipairs(files) do if not fs.access(file) then return false, so:error(ERR.SME_READ(so,file)) end @@ -541,7 +546,7 @@ function UVL._parse_section(self, scheme, k, v) local so = scheme:section(v.name) for k, v2 in pairs(v) do - if k ~= "name" and k ~= "package" and k:sub(1,1) ~= "." then + if k ~= "name" and k ~= "package" and k:byte(1) == 46 then if k == "depends" then s.depends = self:_read_dependency( v2, s.depends ) if not s.depends then @@ -594,7 +599,7 @@ function UVL._parse_var(self, scheme, k, v) local to = so:option(v.name) for k, v2 in pairs(v) do - if k ~= "name" and k ~= "section" and k:sub(1,1) ~= "." then + if k ~= "name" and k ~= "section" and k:byte(1) == 46 then if k == "depends" then t.depends = self:_read_dependency( v2, t.depends ) if not t.depends then @@ -717,9 +722,7 @@ function UVL._read_dependency( self, values, deps ) local k, e, v = val:match("%s*([%w$_.]+)%s*(=?)%s*(.*)") if k and ( - k:match("^"..expr.."%."..expr.."%."..expr.."$") or - k:match("^"..expr.."%."..expr.."$") or - k:match("^"..expr.."$") + k:match(PAT_EXPR1) or k:match(PAT_EXPR2) or k:match(PAT_EXPR3) ) then condition[k] = (e == '=') and v or true else @@ -751,8 +754,8 @@ function UVL._read_validator( self, values, validators ) validator = self:_resolve_function( (value:gsub("^lua:","") ) ) elseif value:match("^regexp:") then local pattern = value:gsub("^regexp:","") - validator = function( type, dtype, pack, sect, optn, ... ) - local values = { ... } + validator = function( type, dtype, pack, sect, optn, arg1, arg2, arg3, arg4, arg5 ) + local values = { arg1, arg2, arg3, arg4, arg5 } for _, v in ipairs(values) do local ok, match = pcall( string.match, v, pattern ) @@ -919,13 +922,13 @@ function uvlitem.type(self) end end -function uvlitem.error(self, ...) +function uvlitem.error(self, arg1, arg2, arg3, arg4, arg5) if not self.e then local errconst = { ERR.CONFIG, ERR.SECTION, ERR.OPTION, ERR.OPTION } self.e = errconst[#self.cref]( self ) end - return self.e:child( ... ) + return self.e:child( arg1, arg2, arg3, arg4, arg5 ) end function uvlitem.errors(self) @@ -992,9 +995,9 @@ end --- Add an error to scheme. -- @return Scheme error context -function scheme.error(self, ...) +function scheme.error(self, arg1, arg2, arg3, arg4, arg5) if not self.e then self.e = ERR.SCHEME( self ) end - return self.e:child( ... ) + return self.e:child( arg1, arg2, arg3, arg4, arg5 ) end --- Get an associated config object.