X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Fblob_table.h;h=9dfca8dcc7171bfc8a81447a3375b8b2c66c3a73;hp=c86fac0d932efc9507b05c4549a3d83b1e0b6bc7;hb=b82856cb22783df0e19990eb68d3694753f52220;hpb=3abe6501c7ebb20a0ead1cd69ebd93cbe6b917e1 diff --git a/include/wimlib/blob_table.h b/include/wimlib/blob_table.h index c86fac0d..9dfca8dc 100644 --- a/include/wimlib/blob_table.h +++ b/include/wimlib/blob_table.h @@ -12,7 +12,7 @@ enum blob_location { /* The blob's data does not exist. This is a temporary state only. */ BLOB_NONEXISTENT = 0, - /* The blob's data is located in a WIM resource identified by the + /* The blob's data is available in the WIM resource identified by the * `struct wim_resource_descriptor' pointed to by @rdesc. * @offset_in_res identifies the offset at which this particular blob * begins in the uncompressed data of the resource. */ @@ -35,9 +35,8 @@ enum blob_location { #ifdef WITH_NTFS_3G /* The blob's data is available as the contents of an NTFS attribute - * accessible through libntfs-3g. The attribute is identified by - * volume, path to an inode, attribute name, and attribute type. - * @ntfs_loc points to a structure containing this information. */ + * accessible through libntfs-3g. @ntfs_loc points to a structure which + * identifies the attribute. */ BLOB_IN_NTFS_VOLUME, #endif @@ -55,16 +54,17 @@ enum blob_location { #endif }; -/* A "blob target" is a stream, and the inode to which that stream belongs, to - * which a blob needs to be extracted as part of an extraction operation. Since - * blobs are single-instanced, a blob may have multiple targets. */ +/* A "blob extraction target" is a stream, and the inode to which that stream + * belongs, to which a blob needs to be extracted as part of an extraction + * operation. Since blobs are single-instanced, a blob may have multiple + * extraction targets. */ struct blob_extraction_target { struct wim_inode *inode; struct wim_inode_stream *stream; }; /* - * Descriptor for a blob, which is a known length sequence of binary data. + * Descriptor for a "blob", which is a known length sequence of binary data. * * Within a WIM file, blobs are single instanced and are identified by SHA-1 * message digest. @@ -74,7 +74,20 @@ struct blob_descriptor { /* List node for a hash bucket of the blob table */ struct hlist_node hash_list; - /* Uncompressed size of this blob */ + /* + * Uncompressed size of this blob. + * + * In most cases we are now enforcing that this is nonzero; i.e. an + * empty stream will have "no blob" rather than "an empty blob". The + * exceptions are: + * + * - blob descriptors with 'blob_location == BLOB_NONEXISTENT', + * e.g. placeholder entries for new metadata resources or for + * blobs required for pipable WIM extraction. In these cases the + * size is not meaningful information anyway. + * - blob descriptors with 'blob_location == BLOB_IN_STAGING_FILE' + * can vary their size over time, including to 0. + */ u64 size; union { @@ -121,7 +134,7 @@ struct blob_descriptor { #ifdef WITH_FUSE /* Number of open file descriptors to this blob during a FUSE mount of - * the containing image. */ + * a WIM image. */ u16 num_opened_fds; #endif @@ -174,6 +187,9 @@ struct blob_descriptor { struct { tchar *file_on_disk; struct wim_inode *file_inode; + #ifdef __WIN32__ + u64 sort_key; + #endif }; /* BLOB_IN_ATTACHED_BUFFER */ @@ -360,18 +376,6 @@ blob_set_is_located_in_wim_resource(struct blob_descriptor *blob, blob->offset_in_res = offset_in_res; } -/* - * Declare that the specified blob is located in the specified non-solid WIM - * resource. In this case, the blob data is the entire uncompressed resource. - */ -static inline void -blob_set_is_located_in_nonsolid_wim_resource(struct blob_descriptor *blob, - struct wim_resource_descriptor *rdesc) -{ - blob_set_is_located_in_wim_resource(blob, rdesc, 0); - blob->size = rdesc->uncompressed_size; -} - static inline void blob_unset_is_located_in_wim_resource(struct blob_descriptor *blob) {