summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorW. Trevor King <wking@tremily.us>2012-10-19 00:47:51 -0400
committerLucas De Marchi <lucas.demarchi@intel.com>2014-03-20 07:22:53 -0300
commit77fe9f6ae31c29b85689b1ee4d03d42fea50886e (patch)
treecd23f7966779fbfec7cb3fb80f58aa7df914d867
parentf397fe659a50374518c964d6849394cdaee5afec (diff)
downloadkmod-77fe9f6ae31c29b85689b1ee4d03d42fea50886e.tar.gz
python: Add Module.versions attribute.
-rw-r--r--libkmod/python/kmod/_libkmod_h.pxd11
-rw-r--r--libkmod/python/kmod/module.pyx18
2 files changed, 29 insertions, 0 deletions
diff --git a/libkmod/python/kmod/_libkmod_h.pxd b/libkmod/python/kmod/_libkmod_h.pxd
index 457cfbc..ef948dd 100644
--- a/libkmod/python/kmod/_libkmod_h.pxd
+++ b/libkmod/python/kmod/_libkmod_h.pxd
@@ -9,14 +9,19 @@
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+cimport libc.stdint as _stdint
+
+
cdef extern from *:
ctypedef char* const_char_ptr 'const char *'
ctypedef char* const_char_const_ptr 'const char const *'
ctypedef void* const_void_ptr 'const void *'
+
cdef extern from 'errno.h':
enum: EEXIST
+
cdef extern from 'stdbool.h':
ctypedef struct bool:
pass
@@ -94,3 +99,9 @@ cdef extern from 'libkmod.h':
# returned by kernel
int kmod_module_get_refcnt(const_kmod_module_ptr mod)
long kmod_module_get_size(const_kmod_module_ptr mod)
+
+ # Information retrieved from ELF headers and section
+ 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)
+ void kmod_module_versions_free_list(kmod_list *list)
diff --git a/libkmod/python/kmod/module.pyx b/libkmod/python/kmod/module.pyx
index 3c1f023..379a75d 100644
--- a/libkmod/python/kmod/module.pyx
+++ b/libkmod/python/kmod/module.pyx
@@ -67,6 +67,24 @@ cdef class Module (object):
return _libkmod_h.kmod_module_get_size(self.module)
size = property(fget=_size_get)
+ def _versions_get(self):
+ cdef _list.ModList ml = _list.ModList()
+ cdef _list.ModListItem mli
+ err = _libkmod_h.kmod_module_get_versions(self.module, &ml.list)
+ if err < 0:
+ raise _KmodError('Could not get versions')
+ try:
+ for item in ml:
+ mli = <_list.ModListItem> item
+ symbol = _util.char_ptr_to_str(
+ _libkmod_h.kmod_module_version_get_symbol(mli.list))
+ crc = _libkmod_h.kmod_module_version_get_crc(mli.list)
+ yield {'symbol': symbol, 'crc': crc}
+ finally:
+ _libkmod_h.kmod_module_versions_free_list(ml.list)
+ ml.list = NULL
+ versions = property(fget=_versions_get)
+
def insert(self, flags=0, extra_options=None, install_callback=None,
data=None, print_action_callback=None):
cdef char *opt = NULL