source: trunk/python/pyregfi/structures.py @ 204

Last change on this file since 204 was 204, checked in by tim, 14 years ago

reorganizing wrappers

File size: 2.0 KB
Line 
1#!/usr/bin/env python
2
3import sys
4import os
5import traceback
6import ctypes
7import ctypes.util
8from ctypes import c_char,c_int,c_uint8,c_uint16,c_uint32,c_uint64,c_int64,POINTER,c_void_p,c_char_p
9
10
11class REGFI_RAW_FILE(ctypes.Structure):
12    fh = None
13   
14    def cb_seek(self, raw_file, offset, whence):
15        try:
16            self.fh.seek(offset, whence)
17        except Exception:
18            traceback.print_exc()
19            # XXX: os.EX_IOERR may not be available on Windoze
20            ctypes.set_errno(os.EX_IOERR)
21            return -1
22
23        return self.fh.tell()
24
25
26    def cb_read(self, raw_file, buf, count):
27        try:
28            # XXX: anyway to do a readinto() here?
29            tmp = self.fh.read(count)
30            ctypes.memmove(buf,tmp,len(tmp))
31
32        except Exception:
33            traceback.print_exc()
34            # XXX: os.EX_IOERR may not be available on Windoze
35            ctypes.set_errno(os.EX_IOERR)
36            return -1
37        return len(tmp)
38
39
40
41# XXX: how can we know for sure the size of off_t and size_t?
42seek_cb_type = ctypes.CFUNCTYPE(c_int64, POINTER(REGFI_RAW_FILE), c_uint64, c_int, use_errno=True)
43read_cb_type = ctypes.CFUNCTYPE(c_int64, POINTER(REGFI_RAW_FILE), POINTER(c_char), c_uint64, use_errno=True)
44
45
46REGFI_RAW_FILE._fields_ = [('seek', seek_cb_type),
47                           ('read', read_cb_type),
48                           ('cur_off', c_uint64),
49                           ('size', c_uint64),
50                           ('state', c_void_p),
51                           ]
52
53
54class REGFI_FILE(ctypes.Structure):
55    _fields_ = [('magic', c_char * 4),
56                ('sequence1', c_uint32),
57                ('sequence2', c_uint32),
58                ('mtime', c_uint64),
59                ('major_version', c_uint32),
60                ('minor_version', c_uint32),
61                ('type', c_uint32),
62                ('format', c_uint32),
63                ('root_cell', c_uint32),
64                ('last_block', c_uint32),
65                ('cluster', c_uint32),
66                ]
67
68
69
Note: See TracBrowser for help on using the repository browser.