X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fsys%2Fluasrc%2Fsys.lua;h=02cea5e91d9664dd9547163722c559483074f51d;hp=2f893650c0078fb3279c36a76062494b9b8563fb;hb=bf7287c60d3819ee2322c47d191d01e55a1ec909;hpb=944f753ebac425a5e1a75dd992359b36967d64c3 diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 2f893650c..02cea5e91 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -41,19 +41,56 @@ local tonumber, ipairs, pairs = tonumber, ipairs, pairs --- LuCI Linux and POSIX system utilities. module "luci.sys" +--- Execute a given shell command and return the error code +-- @class function +-- @name call +-- @param ... Command to call +-- @return Error code of the command +function call(...) + return os.execute(...) / 256 +end + +--- Execute a given shell command and capture its standard output +-- @class function +-- @name exec +-- @param command Command to call +-- @return String containg the return the output of the command +exec = luci.util.exec --- Invoke the luci-flash executable to write an image to the flash memory. -- @param image Local path or URL to image file -- @param kpattern Pattern of files to keep over flash process --- @return Return value of os.execute() +-- @return boolean indicating status +-- @return error message if any function flash(image, kpattern) local cmd = "luci-flash " if kpattern then cmd = cmd .. "-k '" .. kpattern:gsub("'", "") .. "' " end - cmd = cmd .. "'" .. image:gsub("'", "") .. "' >/dev/null 2>&1" + cmd = cmd .. "'" .. image:gsub("'", "") .. "' 2>/dev/null" - return os.execute(cmd) + local fp = io.popen(cmd) + fp:setvbuf("no") + + local line = fp:read() + + if line == "Invalid image type" then + fp:close() + return false, line + else + line = fp:read() + if line == "Performing system upgrade..." then + return true + end + + line = fp:read() + if line == "Performing system upgrade..." then + return true + end + + fp:close() + return false, line + end end --- Retrieve information about currently mounted file systems.