Exemplo n.º 1
0
 def _read_data_primitive(self, current_cab, cffile):
     file_data = ""
     file_data_len = self.file_data_len
     while file_data_len < cffile.cbFile and self.curr_index_data < len(current_cab.cfdata_list):
         current_cfdata = current_cab.cfdata_list[self.curr_index_data]
         file_data_len += current_cfdata.cbUncomp
         file_data += current_cfdata.ab
         self.curr_index_data += 1
     self.file_data_len = file_data_len
     if self.file_data_len > cffile.cbFile:
         # The CAB compressor of windows does a nasty thing...
         # It allows to share a CFDATA between TWO CFFILES
         # We need to adjust the data if this is the case
         difference = self.file_data_len - cffile.cbFile
         real_file_data = file_data[0:(self.file_data_len-difference)]
         # We will create an anonymous CFDATA and add it to the list ..
         # This way the remaining bytes that belongs to the next CFFILE will be read transparently
         new_cfdata = CFDATA()
         new_cfdata.ab = file_data[(self.file_data_len-difference):self.file_data_len]
         new_cfdata.cbUncomp = len(new_cfdata.ab)
         new_cfdata.cbData = len(new_cfdata.ab)
         current_cab.cfdata_list.insert(self.curr_index_data, new_cfdata)
         return real_file_data
     return file_data
Exemplo n.º 2
0
 def _read_data_primitive(self, current_cab, cffile):
     file_data = ""
     file_data_len = self.file_data_len
     while file_data_len < cffile.cbFile and self.curr_index_data < len(current_cab.cfdata_list):
         current_cfdata = current_cab.cfdata_list[self.curr_index_data]
         file_data_len += current_cfdata.cbUncomp
         file_data += current_cfdata.ab
         self.curr_index_data += 1
     self.file_data_len = file_data_len
     if self.file_data_len > cffile.cbFile:
         # The CAB compressor of windows does a nasty thing...
         # It allows to share a CFDATA between TWO CFFILES
         # We need to adjust the data if this is the case
         difference = self.file_data_len - cffile.cbFile
         real_file_data = file_data[0:(self.file_data_len-difference)]
         # We will create an anonymous CFDATA and add it to the list ..
         # This way the remaining bytes that belongs to the next CFFILE will be read transparently
         new_cfdata = CFDATA()
         new_cfdata.ab = file_data[(self.file_data_len-difference):self.file_data_len]
         new_cfdata.cbUncomp = len(new_cfdata.ab)
         new_cfdata.cbData = len(new_cfdata.ab)
         current_cab.cfdata_list.insert(self.curr_index_data, new_cfdata)
         return real_file_data
     return file_data