libs/sys: protect iwinfo loading and return stub if module is not present
[project/luci.git] / libs / sys / luasrc / sys.lua
index c0ee4a1..61da6f1 100644 (file)
@@ -30,15 +30,14 @@ local os     = require "os"
 local table  = require "table"
 local nixio  = require "nixio"
 local fs     = require "nixio.fs"
 local table  = require "table"
 local nixio  = require "nixio"
 local fs     = require "nixio.fs"
-local iwinfo = require "iwinfo"
 local uci    = require "luci.model.uci"
 
 local luci  = {}
 luci.util   = require "luci.util"
 luci.ip     = require "luci.ip"
 
 local uci    = require "luci.model.uci"
 
 local luci  = {}
 luci.util   = require "luci.util"
 luci.ip     = require "luci.ip"
 
-local tonumber, ipairs, pairs, pcall, type, next, setmetatable =
-       tonumber, ipairs, pairs, pcall, type, next, setmetatable
+local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require =
+       tonumber, ipairs, pairs, pcall, type, next, setmetatable, require
 
 
 --- LuCI Linux and POSIX system utilities.
 
 
 --- LuCI Linux and POSIX system utilities.
@@ -625,6 +624,8 @@ wifi = {}
 -- @param ifname        String containing the interface name
 -- @return              A wrapped iwinfo object instance
 function wifi.getiwinfo(ifname)
 -- @param ifname        String containing the interface name
 -- @return              A wrapped iwinfo object instance
 function wifi.getiwinfo(ifname)
+       local stat, iwinfo = pcall(require, "iwinfo")
+
        if ifname then
                local c = 0
                local u = uci.cursor_state()
        if ifname then
                local c = 0
                local u = uci.cursor_state()
@@ -651,19 +652,17 @@ function wifi.getiwinfo(ifname)
                                end)
                end
 
                                end)
                end
 
-               local t = iwinfo.type(ifname)
-               if t then
-                       local x = iwinfo[t]
-                       return setmetatable({}, {
-                               __index = function(t, k)
-                                       if k == "ifname" then
-                                               return ifname
-                                       elseif x[k] then
-                                               return x[k](ifname)
-                                       end
+               local t = stat and iwinfo.type(ifname)
+               local x = t and iwinfo[t] or { }
+               return setmetatable({}, {
+                       __index = function(t, k)
+                               if k == "ifname" then
+                                       return ifname
+                               elseif x[k] then
+                                       return x[k](ifname)
                                end
                                end
-                       })
-               end
+                       end
+               })
        end
 end
 
        end
 end