X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fblob_table.c;h=e93fce1ef2fb91a6f05458c841f3580f84abb756;hb=4765a514142e8e3cc86cc38323d14a9b39860162;hp=0ddd13ad09901413fc23e21893b4ba7f13cebac7;hpb=173bcff7f6950a89ee398d6058b4df8e67cf8675;p=wimlib diff --git a/src/blob_table.c b/src/blob_table.c index 0ddd13ad..e93fce1e 100644 --- a/src/blob_table.c +++ b/src/blob_table.c @@ -138,18 +138,9 @@ clone_blob_descriptor(const struct blob_descriptor *old) break; #ifdef WITH_NTFS_3G case BLOB_IN_NTFS_VOLUME: - if (old->ntfs_loc) { - new->ntfs_loc = memdup(old->ntfs_loc, - sizeof(struct ntfs_location)); - if (new->ntfs_loc == NULL) - goto out_free; - if (new->ntfs_loc->attr_name != NULL) { - new->ntfs_loc->attr_name = - utf16le_dup(new->ntfs_loc->attr_name); - if (new->ntfs_loc->attr_name == NULL) - goto out_free; - } - } + new->ntfs_loc = clone_ntfs_location(old->ntfs_loc); + if (!new->ntfs_loc) + goto out_free; break; #endif } @@ -186,14 +177,10 @@ blob_release_location(struct blob_descriptor *blob) break; #ifdef WITH_NTFS_3G case BLOB_IN_NTFS_VOLUME: - if (blob->ntfs_loc) { - FREE(blob->ntfs_loc->attr_name); - FREE(blob->ntfs_loc); - } + if (blob->ntfs_loc) + free_ntfs_location(blob->ntfs_loc); break; #endif - default: - break; } } @@ -408,7 +395,7 @@ cmp_blobs_by_sequential_order(const void *p1, const void *p2) v = (int)blob1->blob_location - (int)blob2->blob_location; - /* Different resource locations? */ + /* Different locations? */ if (v) return v; @@ -442,13 +429,17 @@ cmp_blobs_by_sequential_order(const void *p1, const void *p2) #ifdef __WIN32__ case BLOB_IN_WINNT_FILE_ON_DISK: case BLOB_WIN32_ENCRYPTED: + /* Windows: compare by starting LCN (logical cluster number) */ + v = cmp_u64(blob1->sort_key, blob2->sort_key); + if (v) + return v; #endif /* Compare files by path: just a heuristic that will place files * in the same directory next to each other. */ return tstrcmp(blob1->file_on_disk, blob2->file_on_disk); #ifdef WITH_NTFS_3G case BLOB_IN_NTFS_VOLUME: - return cmp_u64(blob1->ntfs_loc->sort_key, blob2->ntfs_loc->sort_key); + return cmp_ntfs_locations(blob1->ntfs_loc, blob2->ntfs_loc); #endif default: /* No additional sorting order defined for this resource