Add additional out Module attributes (path, refcnt, ...).
authorW. Trevor King <wking@tremily.us>
Fri, 19 Oct 2012 03:57:30 +0000 (23:57 -0400)
committerW. Trevor King <wking@tremily.us>
Fri, 19 Oct 2012 03:57:30 +0000 (23:57 -0400)
Signed-off-by: W. Trevor King <wking@tremily.us>
kmod/_libkmod_h.pxd
kmod/_util.pxd [new file with mode: 0644]
kmod/_util.pyx [new file with mode: 0644]
kmod/module.pyx

index 975dfa367d055a48282ec540876cb03d020522f8..9282cd269f13b8cf2d385182029bb186e0ff92c9 100644 (file)
@@ -74,4 +74,12 @@ cdef extern from 'libkmod.h':
         )
 
     const_char_ptr kmod_module_get_name(const_kmod_module_ptr mod)
+    const_char_ptr kmod_module_get_path(const_kmod_module_ptr mod)
+    const_char_ptr kmod_module_get_options(const_kmod_module_ptr mod)
+    const_char_ptr kmod_module_get_install_commands(const_kmod_module_ptr mod)
+    const_char_ptr kmod_module_get_remove_commands(const_kmod_module_ptr mod)
+
+    # Information regarding "live information" from module's state, as
+    # returned by kernel
+    int kmod_module_get_refcnt(const_kmod_module_ptr mod)
     long kmod_module_get_size(const_kmod_module_ptr mod)
diff --git a/kmod/_util.pxd b/kmod/_util.pxd
new file mode 100644 (file)
index 0000000..3251d93
--- /dev/null
@@ -0,0 +1,4 @@
+cimport _libkmod_h
+
+
+cdef object char_ptr_to_str(_libkmod_h.const_char_ptr bytes)
diff --git a/kmod/_util.pyx b/kmod/_util.pyx
new file mode 100644 (file)
index 0000000..7c527fc
--- /dev/null
@@ -0,0 +1,12 @@
+import sys as _sys
+
+cimport _libkmod_h
+
+
+cdef object char_ptr_to_str(_libkmod_h.const_char_ptr char_ptr):
+    if char_ptr is NULL:
+        return None
+    if _sys.version_info >= (3,):  # Python 3
+        return str(char_ptr, 'ascii')
+    # Python 2
+    return unicode(char_ptr, 'ascii')
index 1e66772631c816b19a9090e7557ec39ef64c7106..e10c5f38dd3006489a1bac20f7486dd002214673 100644 (file)
@@ -1,9 +1,9 @@
-import sys as _sys
-
 cimport _libkmod_h
 from error import KmodError as _KmodError
 cimport list as _list
 import list as _list
+cimport _util
+import _util
 
 
 cdef class Module (object):
@@ -24,14 +24,34 @@ cdef class Module (object):
         self.module = _libkmod_h.kmod_module_get_module(item.list)
 
     def _name_get(self):
-        name = _libkmod_h.kmod_module_get_name(self.module)
-        if _sys.version_info >= (3,):  # Python 3
-            name = str(name, 'ascii')
-        else:  # Python 2
-            name = unicode(name, 'ascii')
-        return name
+        return _util.char_ptr_to_str(
+            _libkmod_h.kmod_module_get_name(self.module))
     name = property(fget=_name_get)
 
+    def _path_get(self):
+        return _util.char_ptr_to_str(
+            _libkmod_h.kmod_module_get_path(self.module))
+    path = property(fget=_path_get)
+
+    def _options_get(self):
+        return _util.char_ptr_to_str(
+            _libkmod_h.kmod_module_get_options(self.module))
+    options = property(fget=_options_get)
+
+    def _install_commands_get(self):
+        return _util.char_ptr_to_str(
+            _libkmod_h.kmod_module_get_install_commands(self.module))
+    install_commands = property(fget=_install_commands_get)
+
+    def _remove_commands_get(self):
+        return _util.char_ptr_to_str(
+            _libkmod_h.kmod_module_get_remove_commands(self.module))
+    remove_commands = property(fget=_remove_commands_get)
+
+    def _refcnt_get(self):
+        return _libkmod_h.kmod_module_get_refcnt(self.module)
+    refcnt = property(fget=_refcnt_get)
+
     def _size_get(self):
         return _libkmod_h.kmod_module_get_size(self.module)
     size = property(fget=_size_get)