Add Module.info attribute.
authorW. Trevor King <wking@tremily.us>
Fri, 19 Oct 2012 05:07:42 +0000 (01:07 -0400)
committerW. Trevor King <wking@tremily.us>
Fri, 19 Oct 2012 05:07:42 +0000 (01:07 -0400)
Signed-off-by: W. Trevor King <wking@tremily.us>
kmod/_libkmod_h.pxd
kmod/module.pyx

index 0153ac024af888283a1b5f2d0520d08fe308b1d1..a616a265b83b7fdb3515b7e26ac3805975aea4f3 100644 (file)
@@ -97,6 +97,11 @@ cdef extern from 'libkmod.h':
     long kmod_module_get_size(const_kmod_module_ptr mod)
 
     # Information retrieved from ELF headers and section
+    int kmod_module_get_info(const_kmod_module_ptr mod, kmod_list **list)
+    const_char_ptr kmod_module_info_get_key(const_kmod_list_ptr entry)
+    const_char_ptr kmod_module_info_get_value(const_kmod_list_ptr entry)
+    void kmod_module_info_free_list(kmod_list *list)
+
     int kmod_module_get_versions(const_kmod_module_ptr mod, kmod_list **list)
     const_char_ptr kmod_module_version_get_symbol(const_kmod_list_ptr entry)
     _stdint.uint64_t kmod_module_version_get_crc(const_kmod_list_ptr entry)
index 7c84eb840035fb9e2e442bd29a6a0d5c45893057..b25f24f24d194f8a8be6a56c8e18c4b107c1a8f7 100644 (file)
@@ -69,6 +69,27 @@ cdef class Module (object):
         return _libkmod_h.kmod_module_get_size(self.module)
     size = property(fget=_size_get)
 
+    def _info_get(self):
+        cdef _list.ModList ml = _list.ModList()
+        cdef _list.ModListItem mli
+        err = _libkmod_h.kmod_module_get_info(self.module, &ml.list)
+        if err < 0:
+            raise _KmodError('Could not get versions')
+        info = {}
+        try:
+            for item in ml:
+                mli = <_list.ModListItem> item
+                key = _util.char_ptr_to_str(
+                    _libkmod_h.kmod_module_info_get_key(mli.list))
+                value = _util.char_ptr_to_str(
+                    _libkmod_h.kmod_module_info_get_value(mli.list))
+                info[key] = value
+        finally:
+            _libkmod_h.kmod_module_info_free_list(ml.list)
+            ml.list = NULL
+        return info
+    info = property(fget=_info_get)
+
     def _versions_get(self):
         cdef _list.ModList ml = _list.ModList()
         cdef _list.ModListItem mli