Detect IXP4xx processors correctly
[project/luci.git] / libs / sys / luasrc / sys.lua
index e8b5e2c..413aa4c 100644 (file)
@@ -132,7 +132,7 @@ getenv = posix.getenv
 --- Determine the current hostname.
 -- @return             String containing the system hostname
 function hostname()
-       return io.lines("/proc/sys/kernel/hostname")()
+       return posix.uname("%n")
 end
 
 --- Returns the contents of a documented referred by an URL.
@@ -142,7 +142,7 @@ end
 -- @return             String containing the contents of given the URL
 function httpget(url, stream, target)
        if not target then
-               local source = stream and io.open or luci.util.exec
+               local source = stream and io.popen or luci.util.exec
                return source("wget -qO- '"..url:gsub("'", "").."'")
        else
                return os.execute("wget -qO '%s' '%s'" %
@@ -175,27 +175,24 @@ end
 -- @return     String containing the memory used for buffering in kB
 -- @return     String containing the free memory amount in kB
 function sysinfo()
-       local c1 = "cat /proc/cpuinfo|grep system\\ typ|cut -d: -f2 2>/dev/null"
-       local c2 = "uname -m 2>/dev/null"
-       local c3 = "cat /proc/cpuinfo|grep model\\ name|cut -d: -f2 2>/dev/null"
-       local c4 = "cat /proc/cpuinfo|grep cpu\\ model|cut -d: -f2 2>/dev/null"
-       local c5 = "cat /proc/meminfo|grep MemTotal|awk {' print $2 '} 2>/dev/null"
-       local c6 = "cat /proc/meminfo|grep ^Cached|awk {' print $2 '} 2>/dev/null"
-       local c7 = "cat /proc/meminfo|grep MemFree|awk {' print $2 '} 2>/dev/null"
-       local c8 = "cat /proc/meminfo|grep Buffers|awk {' print $2 '} 2>/dev/null"
-
-       local system = luci.util.trim(luci.util.exec(c1))
+       local cpuinfo = luci.fs.readfile("/proc/cpuinfo")
+       local meminfo = luci.fs.readfile("/proc/meminfo")
+
+       local system = cpuinfo:match("system typ.-:%s*([^\n]+)")
        local model = ""
-       local memtotal = tonumber(luci.util.trim(luci.util.exec(c5)))
-       local memcached = tonumber(luci.util.trim(luci.util.exec(c6)))
-       local memfree = tonumber(luci.util.trim(luci.util.exec(c7)))
-       local membuffers = tonumber(luci.util.trim(luci.util.exec(c8)))
-
-       if system == "" then
-               system = luci.util.trim(luci.util.exec(c2))
-               model = luci.util.trim(luci.util.exec(c3))
+       local memtotal = tonumber(meminfo:match("MemTotal:%s*(%d+)"))
+       local memcached = tonumber(meminfo:match("\nCached:%s*(%d+)"))
+       local memfree = tonumber(meminfo:match("MemFree:%s*(%d+)"))
+       local membuffers = tonumber(meminfo:match("Buffers:%s*(%d+)"))
+
+       if not system then
+               system = posix.uname("%m")
+               model = cpuinfo:match("model name.-:%s*([^\n]+)")
+               if not model then
+                       model = cpuinfo:match("Processor.-:%s*([^\n]+)")
+               end
        else
-               model = luci.util.trim(luci.util.exec(c4))
+               model = cpuinfo:match("cpu model.-:%s*([^\n]+)")
        end
 
        return system, model, memtotal, memcached, membuffers, memfree