Пример #1
0
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
Пример #2
0
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]
Пример #3
0
def _int_getter(data_p, index, length):
    return c_int.from_address(data_p + index * BITSIZE['int']).value
Пример #4
0
    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)
Пример #5
0
def _int_getter(data_p, index, length):
    return c_int.from_address(data_p + index * BITSIZE['int']).value
Пример #6
0
    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)