Ignore:
Timestamp:
04/05/11 15:01:41 (13 years ago)
Author:
tim
Message:

several fixes for pyregfi Windows portability
better error handling within pyregfi

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/pyregfi/__init__.py

    r225 r226  
    177177def GetLogMessages():
    178178    msgs = regfi.regfi_log_get_str()
    179     if msgs == None:
     179    if not msgs:
    180180        return ''
    181181    return msgs.decode('utf-8')
     
    625625    # @note Supplied file must be seekable
    626626    def __init__(self, fh):
     627        # The fileno method may not exist, or it may throw an exception
     628        # when called if the file isn't backed with a descriptor.
     629        fn = None
    627630        try:
    628             # The fileno method may not exist, or it may throw an exception
    629             # when called if the file isn't backed with a descriptor.
    630             if hasattr(fh, 'fileno'):
    631                 self.file = regfi.regfi_alloc(fh.fileno(), REGFI_ENCODING_UTF8)
    632                 return
     631            # XXX: Native calls to Windows filenos don't seem to work. 
     632            #      Need to investigate why.
     633            if not is_win32 and hasattr(fh, 'fileno'):
     634                fn = fh.fileno()
    633635        except:
    634636            pass
    635        
    636         fh.seek(0)
    637         self.raw_file = structures.REGFI_RAW_FILE()
    638         self.raw_file.fh = fh
    639         self.raw_file.seek = seek_cb_type(self.raw_file.cb_seek)
    640         self.raw_file.read = read_cb_type(self.raw_file.cb_read)
    641         self.file = regfi.regfi_alloc_cb(pointer(self.raw_file), REGFI_ENCODING_UTF8)
    642         if not self.file:
    643             # XXX: switch to non-generic exception
    644             raise Exception("Could not open registry file.  Current log:\n"
    645                             + GetLogMessages())
     637
     638        if fn != None:
     639            self.file = regfi.regfi_alloc(fn, REGFI_ENCODING_UTF8)
     640            if not self.file:
     641                # XXX: switch to non-generic exception
     642                raise Exception("Could not open registry file.  Current log:\n"
     643                                + GetLogMessages())
     644        else:
     645            fh.seek(0)
     646            self.raw_file = structures.REGFI_RAW_FILE()
     647            self.raw_file.fh = fh
     648            self.raw_file.seek = seek_cb_type(self.raw_file.cb_seek)
     649            self.raw_file.read = read_cb_type(self.raw_file.cb_read)
     650            self.file = regfi.regfi_alloc_cb(pointer(self.raw_file), REGFI_ENCODING_UTF8)
     651            if not self.file:
     652                # XXX: switch to non-generic exception
     653                raise Exception("Could not open registry file.  Current log:\n"
     654                                + GetLogMessages())
     655
    646656
    647657    def __getattr__(self, name):
     
    703713    def __init__(self, hive):
    704714        self._iter = regfi.regfi_iterator_new(hive.file, REGFI_ENCODING_UTF8)
    705         if self._iter == None:
     715        if not self._iter:
    706716            raise Exception("Could not create iterator.  Current log:\n"
    707717                            + GetLogMessages())
Note: See TracChangeset for help on using the changeset viewer.