wifi: add support for /usr/bin binary path
Years ago iwconfig started its life in /sbin. Then some distributions moved it to /usr/bin. Then in 2012 some projects started pushing for deprecation of /usr/sbin and merging everything into /usr/bin. We now search paths including /usr/bin for the iwconfig binary. This is because sbin paths are not usually in non privileged user PATH, so we help io.popen locate the binary on the file-system. We do this search in the following way: - default to basename only, 'iwconfig' for the iwconfig variable - search paths one by one once and redeclare variable iwconfig with full path if binary is found in any - avoid searching paths on next execution if iwconfig variable already contains a path
This commit is contained in:
parent
f7fdd909ee
commit
fac688ec4b
|
@ -9,11 +9,11 @@ local math = { ceil = math.ceil }
|
|||
local setmetatable = setmetatable
|
||||
local helpers = require("vicious.helpers")
|
||||
local io = {
|
||||
open = io.open,
|
||||
open = io.open,
|
||||
popen = io.popen
|
||||
}
|
||||
local string = {
|
||||
find = string.find,
|
||||
find = string.find,
|
||||
match = string.match
|
||||
}
|
||||
-- }}}
|
||||
|
@ -24,6 +24,12 @@ local string = {
|
|||
local wifi = {}
|
||||
|
||||
|
||||
-- {{{ Variable definitions
|
||||
local iwconfig = "iwconfig"
|
||||
local iwcpaths = { "/sbin", "/usr/sbin", "/usr/local/sbin", "/usr/bin" }
|
||||
-- }}}
|
||||
|
||||
|
||||
-- {{{ Wireless widget type
|
||||
local function worker(format, warg)
|
||||
if not warg then return end
|
||||
|
@ -39,14 +45,19 @@ local function worker(format, warg)
|
|||
["{sign}"] = 0
|
||||
}
|
||||
|
||||
-- Get data from iwconfig where available
|
||||
local iwconfig = "/sbin/iwconfig"
|
||||
local f = io.open(iwconfig, "rb")
|
||||
if not f then
|
||||
iwconfig = "/usr/sbin/iwconfig"
|
||||
else
|
||||
f:close()
|
||||
-- Sbin paths aren't in user PATH, search for the binary
|
||||
if iwconfig == "iwconfig" then
|
||||
for _, p in ipairs(iwcpaths) do
|
||||
local f = io.open(p .. "/iwconfig", "rb")
|
||||
if f then
|
||||
iwconfig = p .. "/iwconfig"
|
||||
f:close()
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Get data from iwconfig where available
|
||||
local f = io.popen(iwconfig .." ".. warg .. " 2>&1")
|
||||
local iw = f:read("*all")
|
||||
f:close()
|
||||
|
|
Loading…
Reference in New Issue