def record_list_changed_callback( # pylint: disable=unused-argument mysystem, callback_type, commanddata1, comanddata2, userdata): """Increase a counter referenced by userdata.""" _record_list_changed_count = c_int.from_address(userdata) _record_list_changed_count.value += 1 return RESULT.OK.value
def get_process_argv(pid, unhandled_exc_handler = None): argmax = c_int() mib = (c_int * 3)() mib[0] = CTL_KERN mib[1] = KERN_ARGMAX size = c_size_t(sizeof(argmax)) libc.sysctl(mib, 2, byref(argmax), byref(size), None, 0) procargs = create_string_buffer(argmax.value) mib[0] = CTL_KERN mib[1] = KERN_PROCARGS2 mib[2] = pid size = c_uint(argmax.value) libc.sysctl(mib, 3, procargs, byref(size), None, 0) cp = sizeof(c_int) while cp < size.value and procargs[cp] != '\x00': cp += 1 if cp == size.value: raise Exception("Couldn't skip exec_path") while cp < size.value and procargs[cp] == '\x00': cp += 1 addr = addressof(procargs) numargs = c_int.from_address(addr).value data = string_at(addr + cp, size.value - cp) if numargs == 0: try: raise Exception('No args for process: %r' % data.split('\x00', 10)[:10]) except Exception: if unhandled_exc_handler: unhandled_exc_handler(False) return data.split('\x00', numargs)[0:numargs]
def _int_getter(data_p, index, length): return c_int.from_address(data_p + index * BITSIZE['int']).value
def __init__(self, data): self.data = data self.start = cast(c_char_p(self.data), c_void_p).value self.header = Header.from_address(self.start) vertex_count = c_ushort.from_address(self.start + sizeof(Header)) self.vertices = Array( type=Vertex, address=self.start + sizeof(Header) + sizeof(c_ushort), amount=vertex_count.value, ) triangle_count = c_ushort.from_address(self.vertices.end) self.triangles = Array( type=Triangle, address=self.vertices.end + sizeof(c_ushort), amount=triangle_count.value, ) group_count = c_ushort.from_address(self.triangles.end) self.groups = [] addr = self.triangles.end + sizeof(c_ushort) for i in range(group_count.value): self.groups.append(Group(addr)) addr = self.groups[-1].end material_count = c_ushort.from_address(addr) self.materials = Array( type=Material, address=addr + sizeof(c_ushort), amount=material_count.value, ) addr = self.materials.end self.fps = c_float.from_address(addr) addr += sizeof(c_float) self.current_time = c_float.from_address(addr) addr += sizeof(c_float) self.frame_count = c_int.from_address(addr) addr += sizeof(c_int) joint_count = c_ushort.from_address(addr) addr += sizeof(c_ushort) self.joints = [] for i in range(joint_count.value): joint = Joint(addr) self.joints.append(joint) addr = joint.end sub_version = c_int.from_address(addr) # should be 1 addr += sizeof(c_int) group_comment_count = c_uint.from_address(addr) addr += sizeof(c_uint) #fixme implement group comments (count is currently 0) material_comment_count = c_int.from_address(addr) addr += sizeof(c_int) #fixme implement material comments (count is currently 0) joint_comment_count = c_int.from_address(addr) addr += sizeof(c_int) #fixme implement joint comments (count is currently 0) model_comment_count = c_int.from_address(addr) addr += sizeof(c_int) #fixme implement model comments (count is currently 0) sub_version = c_int.from_address(addr).value addr += sizeof(c_int) if sub_version == 1: extra_type = VertexExtra1 elif sub_version == 2: raise NotImplemented() self.vertex_extras = Array( type=extra_type, address=addr, amount=vertex_count.value, ) addr = self.vertex_extras.end assert addr - self.start == len(data)
def __init__(self, data): self.data = data self.start = cast(c_char_p(self.data), c_void_p).value self.header = Header.from_address(self.start) vertex_count = c_ushort.from_address(self.start + sizeof(Header)) self.vertices = Array( type = Vertex, address = self.start + sizeof(Header) + sizeof(c_ushort), amount = vertex_count.value, ) triangle_count = c_ushort.from_address(self.vertices.end) self.triangles = Array( type = Triangle, address = self.vertices.end + sizeof(c_ushort), amount = triangle_count.value, ) group_count = c_ushort.from_address(self.triangles.end) self.groups = [] addr = self.triangles.end+sizeof(c_ushort) for i in range(group_count.value): self.groups.append(Group(addr)) addr = self.groups[-1].end material_count = c_ushort.from_address(addr) self.materials = Array( type = Material, address = addr + sizeof(c_ushort), amount = material_count.value, ) addr = self.materials.end self.fps = c_float.from_address(addr) addr += sizeof(c_float) self.current_time = c_float.from_address(addr) addr += sizeof(c_float) self.frame_count = c_int.from_address(addr) addr += sizeof(c_int) joint_count = c_ushort.from_address(addr) addr += sizeof(c_ushort) self.joints = [] for i in range(joint_count.value): joint = Joint(addr) self.joints.append(joint) addr = joint.end sub_version = c_int.from_address(addr) # should be 1 addr += sizeof(c_int) group_comment_count = c_uint.from_address(addr) addr += sizeof(c_uint) #fixme implement group comments (count is currently 0) material_comment_count = c_int.from_address(addr) addr += sizeof(c_int) #fixme implement material comments (count is currently 0) joint_comment_count = c_int.from_address(addr) addr += sizeof(c_int) #fixme implement joint comments (count is currently 0) model_comment_count = c_int.from_address(addr) addr += sizeof(c_int) #fixme implement model comments (count is currently 0) sub_version = c_int.from_address(addr).value addr += sizeof(c_int) if sub_version == 1: extra_type = VertexExtra1 elif sub_version == 2: raise NotImplemented() self.vertex_extras = Array( type = extra_type, address = addr, amount = vertex_count.value, ) addr = self.vertex_extras.end assert addr - self.start == len(data)