]> wimlib.net Git - wimlib/blobdiff - src/resource.c
overwrite_wim_inplace(): Only write new metadata resources for modified images
[wimlib] / src / resource.c
index 24730ab477f0794b2f3a4d587f1cda8664ffff61..7df50e727ab7eeb1c240d0afbafe0a880a5ea4bd 100644 (file)
 #  include <ntfs-3g/dir.h>
 #endif
 
+#if defined(__WIN32__) && !defined(INVALID_HANDLE_VALUE)
+#  define INVALID_HANDLE_VALUE ((HANDLE)(-1))
+#endif
+
 /*
  * Reads all or part of a compressed resource into an in-memory buffer.
  *
@@ -76,7 +80,7 @@ read_compressed_resource(FILE *fp, u64 resource_compressed_size,
               resource_compressed_size,
               resource_uncompressed_size,
               resource_offset);
-       DEBUG2("resource_ctype = %s, len = %"PRIu64", offset = %"PRIu64"",
+       DEBUG2("resource_ctype = %"TS", len = %"PRIu64", offset = %"PRIu64"",
               wimlib_get_compression_type_string(resource_ctype), len, offset);
        /* Trivial case */
        if (len == 0)
@@ -436,10 +440,10 @@ wim_get_fp(WIMStruct *w)
                        goto out;
                }
        }
-       DEBUG("Opening extra file descriptor to `%s'", w->filename);
-       fp = fopen(w->filename, "rb");
+       DEBUG("Opening extra file descriptor to `%"TS"'", w->filename);
+       fp = tfopen(w->filename, T("rb"));
        if (!fp)
-               ERROR_WITH_ERRNO("Failed to open `%s'", w->filename);
+               ERROR_WITH_ERRNO("Failed to open `%"TS"'", w->filename);
 out:
        pthread_mutex_unlock(&w->fp_tab_mutex);
        return fp;
@@ -556,10 +560,10 @@ read_wim_resource(const struct wim_lookup_table_entry *lte, void *buf,
                if (lte->file_on_disk_fp) {
                        fp = lte->file_on_disk_fp;
                } else {
-                       fp = fopen(lte->file_on_disk, "rb");
+                       fp = tfopen(lte->file_on_disk, T("rb"));
                        if (!fp) {
                                ERROR_WITH_ERRNO("Failed to open the file "
-                                                "`%s'", lte->file_on_disk);
+                                                "`%"TS"'", lte->file_on_disk);
                                ret = WIMLIB_ERR_OPEN;
                                break;
                        }
@@ -570,9 +574,10 @@ read_wim_resource(const struct wim_lookup_table_entry *lte, void *buf,
                break;
 #ifdef __WIN32__
        case RESOURCE_WIN32:
-               wimlib_assert(lte->file_on_disk_fp != NULL);
-               ret = win32_read_file(lte->file_on_disk, lte->file_on_disk_fp,
-                                     offset, size, buf);
+               wimlib_assert(lte->win32_file_on_disk_fp != INVALID_HANDLE_VALUE);
+               ret = win32_read_file(lte->file_on_disk,
+                                     lte->win32_file_on_disk_fp, offset,
+                                     size, buf);
                break;
 #endif
        case RESOURCE_IN_ATTACHED_BUFFER:
@@ -589,7 +594,7 @@ read_wim_resource(const struct wim_lookup_table_entry *lte, void *buf,
                        offset += 8;
                if (ntfs_attr_pread(lte->attr, offset, size, buf) != size) {
                        ERROR_WITH_ERRNO("Error reading NTFS attribute "
-                                        "at `%s'",
+                                        "at `%"TS"'",
                                         lte->ntfs_loc->path);
                        ret = WIMLIB_ERR_NTFS_3G;
                }
@@ -725,16 +730,12 @@ copy_resource(struct wim_lookup_table_entry *lte, void *wim)
        WIMStruct *w = wim;
        int ret;
 
-       if ((lte->resource_entry.flags & WIM_RESHDR_FLAG_METADATA) &&
-           !w->write_metadata)
-               return 0;
-
        ret = write_wim_resource(lte, w->out_fp,
                                 wim_resource_compression_type(lte),
                                 &lte->output_resource_entry, 0);
-       if (ret != 0)
-               return ret;
-       lte->out_refcnt = lte->refcnt;
-       lte->part_number = w->hdr.part_number;
-       return 0;
+       if (ret == 0) {
+               lte->out_refcnt = lte->refcnt;
+               lte->part_number = w->hdr.part_number;
+       }
+       return ret;
 }