summaryrefslogtreecommitdiffhomepage
path: root/libs/sys/luasrc/sys.lua
diff options
context:
space:
mode:
Diffstat (limited to 'libs/sys/luasrc/sys.lua')
-rw-r--r--libs/sys/luasrc/sys.lua26
1 files changed, 23 insertions, 3 deletions
diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua
index e27e1c4e8..9b68a25e6 100644
--- a/libs/sys/luasrc/sys.lua
+++ b/libs/sys/luasrc/sys.lua
@@ -60,15 +60,35 @@ 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)
+ 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.