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
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