]> wimlib.net Git - wimlib/blobdiff - include/wimlib/blob_table.h
Consistently use _WIN32 instead of __WIN32__
[wimlib] / include / wimlib / blob_table.h
index 0999660026ebde5c297d2a04684ec922f1683657..9bb54b542819992d66aeb5d94657fba8e177d751 100644 (file)
@@ -40,17 +40,11 @@ enum blob_location {
        BLOB_IN_NTFS_VOLUME,
 #endif
 
-#ifdef __WIN32__
-       /* Windows only: the blob's data is available as the contents of the
-        * data stream named by @file_on_disk.  @file_on_disk is an NT namespace
-        * path that may be longer than the Win32-level MAX_PATH.  Furthermore,
-        * the stream may require "backup semantics" to access.  */
-       BLOB_IN_WINNT_FILE_ON_DISK,
-
-       /* Windows only: the blob's data is available as the raw encrypted data
-        * of the external file named by @file_on_disk.  @file_on_disk is a
-        * Win32 namespace path.  */
-       BLOB_WIN32_ENCRYPTED,
+#ifdef _WIN32
+       /* Windows only: the blob's data is available in the file (or named data
+        * stream) specified by @windows_file.  The data might be only properly
+        * accessible through the Windows API.  */
+       BLOB_IN_WINDOWS_FILE,
 #endif
 };
 
@@ -108,7 +102,7 @@ struct blob_descriptor {
                        struct wim_inode *back_inode;
                        u32 back_stream_id;
                };
-       } _packed_attribute; /* union is SHA1_HASH_SIZE bytes */
+       };
 
        /* Number of times this blob is referenced by file streams in WIM
         * images.  See blob_decrement_refcnt() for information about the
@@ -147,6 +141,9 @@ struct blob_descriptor {
        /* 1 iff the SHA-1 message digest of this blob is unknown.  */
        u16 unhashed : 1;
 
+       /* 1 iff this blob has failed its checksum.  */
+       u16 corrupted : 1;
+
        /* Temporary fields used when writing blobs; set as documented for
         * prepare_blob_list_for_write().  */
        u16 unique_size : 1;
@@ -175,14 +172,13 @@ struct blob_descriptor {
                        union {
 
                                /* BLOB_IN_FILE_ON_DISK
-                                * BLOB_IN_WINNT_FILE_ON_DISK
-                                * BLOB_WIN32_ENCRYPTED  */
+                                * BLOB_IN_WINDOWS_FILE  */
                                struct {
-                                       tchar *file_on_disk;
+                                       union {
+                                               tchar *file_on_disk;
+                                               struct windows_file *windows_file;
+                                       };
                                        struct wim_inode *file_inode;
-                               #ifdef __WIN32__
-                                       u64 sort_key;
-                               #endif
                                };
 
                                /* BLOB_IN_ATTACHED_BUFFER */
@@ -266,14 +262,11 @@ struct blob_descriptor {
 
                /* Links blobs being exported.  */
                struct list_head export_blob_list;
-
-               /* Links original list of blobs in the read-write mounted image.  */
-               struct list_head orig_blob_list;
        };
 };
 
 extern struct blob_table *
-new_blob_table(size_t capacity) _malloc_attribute;
+new_blob_table(size_t capacity);
 
 extern void
 free_blob_table(struct blob_table *table);
@@ -289,10 +282,10 @@ write_blob_table_from_blob_list(struct list_head *blob_list,
                                int write_resource_flags);
 
 extern struct blob_descriptor *
-new_blob_descriptor(void) _malloc_attribute;
+new_blob_descriptor(void);
 
 extern struct blob_descriptor *
-clone_blob_descriptor(const struct blob_descriptor *blob) _malloc_attribute;
+clone_blob_descriptor(const struct blob_descriptor *blob);
 
 extern void
 blob_decrement_refcnt(struct blob_descriptor *blob, struct blob_table *table);
@@ -391,13 +384,27 @@ static inline bool
 blob_is_in_file(const struct blob_descriptor *blob)
 {
        return blob->blob_location == BLOB_IN_FILE_ON_DISK
-#ifdef __WIN32__
-           || blob->blob_location == BLOB_IN_WINNT_FILE_ON_DISK
-           || blob->blob_location == BLOB_WIN32_ENCRYPTED
+#ifdef _WIN32
+           || blob->blob_location == BLOB_IN_WINDOWS_FILE
 #endif
           ;
 }
 
+#ifdef _WIN32
+extern const wchar_t *
+get_windows_file_path(const struct windows_file *file);
+#endif
+
+static inline const tchar *
+blob_file_path(const struct blob_descriptor *blob)
+{
+#ifdef _WIN32
+       if (blob->blob_location == BLOB_IN_WINDOWS_FILE)
+               return get_windows_file_path(blob->windows_file);
+#endif
+       return blob->file_on_disk;
+}
+
 extern struct blob_descriptor *
 new_blob_from_data_buffer(const void *buffer, size_t size,
                          struct blob_table *blob_table);
@@ -405,7 +412,7 @@ new_blob_from_data_buffer(const void *buffer, size_t size,
 extern struct blob_descriptor *
 after_blob_hashed(struct blob_descriptor *blob,
                  struct blob_descriptor **back_ptr,
-                 struct blob_table *blob_table);
+                 struct blob_table *blob_table, struct wim_inode *inode);
 
 extern int
 hash_unhashed_blob(struct blob_descriptor *blob, struct blob_table *blob_table,