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