1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import os
import ctypes
def find_library(name, root=None):
root = root or "/usr/lib/"
for dirpath, dirnames, filenames in os.walk(root):
identifier = filter(lambda x: x.startswith(name), filenames)
identifier = filter(lambda x: ".so" in x, identifier)
identifier = filter(lambda x: not os.path.islink(os.path.join(dirpath, x)), identifier)
if identifier:
return identifier.pop()
identifier = find_library("libglib-2.0")
glib = ctypes.CDLL(identifier)
def glist(addr):
class _GList(ctypes.Structure):
_fields_ = [('data', ctypes.c_void_p),
('next', ctypes.c_void_p)]
l = addr
while l:
l = _GList.from_address(l)
yield l.data
l = l.next
glib.g_list_free(addr)
def typed_glist(cls, addr):
for obj in glist(addr):
yield cls(obj)
if __name__ == "__main__":
print find_library("libebook-1.2")
|