forked from dan/liminix
devout: add functions to read sysfs attributes
This commit is contained in:
parent
e0bd7aec1e
commit
a3fca5bf05
|
@ -1,3 +1,4 @@
|
|||
(local { : dirname } (require :anoia))
|
||||
(local ll (require :lualinux))
|
||||
(local {
|
||||
: AF_LOCAL
|
||||
|
@ -145,6 +146,25 @@
|
|||
:_tbl #(do fds) ;exposed for tests
|
||||
}))
|
||||
|
||||
(fn read-if-exists [pathname]
|
||||
(match (ll.open pathname 0 0)
|
||||
fd (let [s (ll.read fd 4096)
|
||||
s1 (string.gsub s "[ \n]*(.-)[ \n]*" "%1")]
|
||||
(ll.close fd)
|
||||
s1)
|
||||
nil nil))
|
||||
|
||||
(fn sysfs [fspath]
|
||||
{
|
||||
:attr (fn [_ path name]
|
||||
(read-if-exists (.. fspath "/" path "/" name)))
|
||||
:attrs (fn [self path name]
|
||||
(when path
|
||||
(or (self:attr path name)
|
||||
(self:attrs (dirname path) name))))
|
||||
})
|
||||
|
||||
|
||||
(fn run []
|
||||
(let [[sockname nl-groups] arg
|
||||
s (check-errno (unix-socket sockname))
|
||||
|
@ -170,4 +190,4 @@
|
|||
(ll.poll pollfds 5000)
|
||||
(loop:feed (unpack-pollfds pollfds))))))
|
||||
|
||||
{ : database : run : event-loop : parse-event }
|
||||
{ : database : run : event-loop : parse-event : sysfs }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
(local { : database : event-loop : parse-event } (require :devout))
|
||||
(local { : database : event-loop : parse-event : sysfs } (require :devout))
|
||||
(local { : view } (require :fennel))
|
||||
(local ll (require :lualinux))
|
||||
(import-macros { : expect : expect= } :anoia.assert)
|
||||
|
@ -207,4 +207,35 @@ MINOR=17")
|
|||
))
|
||||
|
||||
|
||||
;; tests for sysfs attrs
|
||||
|
||||
(example
|
||||
"read attributes from sysfs"
|
||||
(let [sysfs (sysfs "./fixtures/sys")]
|
||||
;; finds attr at path
|
||||
(expect=
|
||||
(sysfs:attr "devices/pci0000:00/0000:00:14.0/usb1/1-2" "idVendor")
|
||||
"1199")
|
||||
;; finds attr in ancestor directory
|
||||
(expect=
|
||||
(sysfs:attrs
|
||||
"devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0"
|
||||
"idVendor")
|
||||
"8087")
|
||||
;; nil if no attr
|
||||
(expect=
|
||||
(sysfs:attrs
|
||||
"devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0"
|
||||
"idOfWizard")
|
||||
nil)
|
||||
;; closer ancestor wins against more distant one
|
||||
(expect=
|
||||
(sysfs:attrs
|
||||
"devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0"
|
||||
"modalias")
|
||||
"usb:v8087p0A2Bd0001dcE0dsc01dp01icE0isc01ip01in00")))
|
||||
|
||||
|
||||
|
||||
|
||||
(if failed (os.exit 1) (print "OK"))
|
||||
|
|
Loading…
Reference in New Issue