]> wimlib.net Git - wimlib/blobdiff - src/metadata_resource.c
filedes_t => int
[wimlib] / src / metadata_resource.c
index 91b1121f92ef7efc7b346e68ae3e5d4cd7c656c6..3e8b7283e17f3267fb5d660df3db0412e41c9150 100644 (file)
@@ -25,7 +25,7 @@
 #include "lookup_table.h"
 
 /*
- * Reads the metadata metadata resource from the WIM file.  The metadata
+ * Reads a metadata resource for an image in the WIM file.  The metadata
  * resource consists of the security data, followed by the directory entry for
  * the root directory, followed by all the other directory entries in the
  * filesystem.  The subdir_offset field of each directory entry gives the start
  * end-of-directory is signaled by a directory entry of length '0', really of
  * length 8, because that's how long the 'length' field is.
  *
- * @fp:                The FILE* for the input WIM file.
- * @wim_ctype: The compression type of the WIM file.
- * @imd:       Pointer to the image metadata structure.  Its `metadata_lte'
- *             member specifies the lookup table entry for the metadata
- *             resource.  The rest of the image metadata entry will be filled
- *             in by this function.
+ * @w:         Pointer to the WIMStruct for the WIM file.
  *
- * @return:    Zero on success, nonzero on failure.
+ * @imd:       Pointer to the image metadata structure for the image whose
+ *             metadata resource we are reading.  Its `metadata_lte' member
+ *             specifies the lookup table entry for the metadata resource.  The
+ *             rest of the image metadata entry will be filled in by this
+ *             function.
+ *
+ * Returns:    Zero on success, nonzero on failure.
  */
 int
 read_metadata_resource(WIMStruct *w, struct wim_image_metadata *imd)
@@ -55,8 +56,10 @@ read_metadata_resource(WIMStruct *w, struct wim_image_metadata *imd)
        metadata_lte = imd->metadata_lte;
        metadata_len = wim_resource_size(metadata_lte);
 
-       DEBUG("Reading metadata resource: length = %"PRIu64", "
-             "offset = %"PRIu64"", metadata_len,
+       DEBUG("Reading metadata resource: original_size = %"PRIu64", "
+             "size = %"PRIu64", offset = %"PRIu64"",
+             metadata_lte->resource_entry.original_size,
+             metadata_lte->resource_entry.size,
              metadata_lte->resource_entry.offset);
 
        /* There is no way the metadata resource could possibly be less than (8
@@ -85,7 +88,7 @@ read_metadata_resource(WIMStruct *w, struct wim_image_metadata *imd)
        }
 
        /* Read the metadata resource into memory.  (It may be compressed.) */
-       ret = read_full_resource_into_buf(metadata_lte, buf, false);
+       ret = read_full_resource_into_buf(metadata_lte, buf);
        if (ret)
                goto out_free_buf;
 
@@ -190,8 +193,8 @@ recalculate_security_data_length(struct wim_security_data *sd)
  * uncompressed data rather a lookup table entry; also writes the SHA1 hash of
  * the buffer to @hash.  */
 static int
-write_wim_resource_from_buffer(const void *buf, u64 buf_size,
-                              FILE *out_fp, int out_ctype,
+write_wim_resource_from_buffer(const void *buf, size_t buf_size,
+                              int out_fd, int out_ctype,
                               struct resource_entry *out_res_entry,
                               u8 hash[SHA1_HASH_SIZE])
 {
@@ -204,7 +207,7 @@ write_wim_resource_from_buffer(const void *buf, u64 buf_size,
        lte.resource_entry.original_size = buf_size;
        lte.resource_entry.flags         = 0;
        lte.unhashed                     = 1;
-       ret = write_wim_resource(&lte, out_fp, out_ctype, out_res_entry, 0);
+       ret = write_wim_resource(&lte, out_fd, out_ctype, out_res_entry, 0);
        if (ret == 0)
                copy_hash(hash, lte.hash);
        return ret;
@@ -223,11 +226,11 @@ write_metadata_resource(WIMStruct *w)
        u64 metadata_original_size;
        struct wim_security_data *sd;
 
-       wimlib_assert(w->out_fp != NULL);
+       wimlib_assert(w->out_fd != -1);
        wimlib_assert(w->current_image != WIMLIB_NO_IMAGE);
 
        DEBUG("Writing metadata resource for image %d (offset = %"PRIu64")",
-             w->current_image, ftello(w->out_fp));
+             w->current_image, filedes_offset(w->out_fd));
 
 
        root = wim_root_dentry(w);
@@ -276,20 +279,15 @@ write_metadata_resource(WIMStruct *w)
         * compression type.  The lookup table entry for the metadata resource
         * is updated. */
        ret = write_wim_resource_from_buffer(buf, metadata_original_size,
-                                            w->out_fp,
+                                            w->out_fd,
                                             wimlib_get_compression_type(w),
                                             &lte->output_resource_entry,
                                             lte->hash);
-       if (ret)
-               goto out_free_buf;
-
        /* Note that although the SHA1 message digest of the metadata resource
         * is very likely to have changed, the corresponding lookup table entry
         * is not actually located in the hash table, so it need not be
         * re-inserted in the hash table. */
-       lte->out_refcnt = 1;
-       lte->output_resource_entry.flags |= WIM_RESHDR_FLAG_METADATA;
-out_free_buf:
+
        /* All the data has been written to the new WIM; no need for the buffer
         * anymore */
        FREE(buf);