@@ -224,26 +224,29 @@ def check_cluster_allocate(idx, cluster, cluster_to_compare_with):
224224 # In case input_file is bigger than diff_file_name, first check
225225 # if clusters from diff_file_name differ, and then check if the
226226 # rest contain data
227- diff_nonzero_clusters_set = set (diff_nonzero_clusters )
228- for cluster in nonzero_clusters :
229- if cluster >= last_diff_cluster :
230- allocate_cluster (cluster )
231- elif cluster in diff_nonzero_clusters_set :
232- # If a cluster has different data from the original_cluster
233- # then it must be allocated
234- cluster_data = os .pread (fd , cluster_size , cluster_size * cluster )
235- original_cluster = os .pread (diff_fd , cluster_size , cluster_size * cluster )
236- check_cluster_allocate (cluster , cluster_data , original_cluster )
237- diff_nonzero_clusters_set .remove (cluster )
238- else :
239- allocate_cluster (cluster )
227+ diff_nonzero_clusters_set = Interval (diff_nonzero_clusters )
228+
229+ for (cluster_left , cluster_right ) in nonzero_clusters :
230+ for cluster in range (cluster_left , cluster_right + 1 ):
231+ if cluster >= last_diff_cluster :
232+ allocate_cluster (cluster )
233+ elif cluster in diff_nonzero_clusters_set :
234+ # If a cluster has different data from the original_cluster
235+ # then it must be allocated
236+ cluster_data = os .pread (fd , cluster_size , cluster_size * cluster )
237+ original_cluster = os .pread (diff_fd , cluster_size , cluster_size * cluster )
238+ check_cluster_allocate (cluster , cluster_data , original_cluster )
239+ else :
240+ allocate_cluster (cluster )
240241
241242 # These are not present in the original file
242- for cluster in diff_nonzero_clusters_set :
243- allocate_cluster (cluster )
243+ for (cluster_left , cluster_right ) in diff_nonzero_clusters_set :
244+ for cluster in range (cluster_left , cluster_right + 1 ):
245+ allocate_cluster (cluster )
244246 else :
245- for cluster in nonzero_clusters :
246- allocate_cluster (cluster )
247+ for (cluster_left , cluster_right ) in nonzero_clusters :
248+ for cluster in range (cluster_left , cluster_right + 1 ):
249+ allocate_cluster (cluster )
247250
248251 else :
249252 zero_cluster = bytes (cluster_size )
0 commit comments