]> wimlib.net Git - wimlib/blobdiff - src/resource.c
Clean up pipable WIM extraction
[wimlib] / src / resource.c
index fb1047e0c01d471bc0d28f07aca863ea6eb85489..eac8089b2d644f1abb286197edfbec4e5b078e95 100644 (file)
 #include "wimlib/endianness.h"
 #include "wimlib/error.h"
 #include "wimlib/file_io.h"
-#include "wimlib/ntfs_3g.h" /* for read_ntfs_attribute_prefix() */
+#include "wimlib/ntfs_3g.h"
 #include "wimlib/resource.h"
 #include "wimlib/sha1.h"
 #include "wimlib/wim.h"
-
-#ifdef __WIN32__
-/* for read_winnt_stream_prefix(), read_win32_encrypted_file_prefix() */
-#  include "wimlib/win32.h"
-#endif
+#include "wimlib/win32.h"
 
 /*
  *                         Compressed WIM resources
@@ -558,28 +554,6 @@ read_error:
        goto out_free_memory;
 }
 
-static int
-fill_zeroes(u64 size, consume_data_callback_t cb, void *cb_ctx)
-{
-       if (unlikely(size)) {
-               u8 buf[min(size, BUFFER_SIZE)];
-
-               memset(buf, 0, sizeof(buf));
-
-               do {
-                       size_t len;
-                       int ret;
-
-                       len = min(size, BUFFER_SIZE);
-                       ret = cb(buf, len, cb_ctx);
-                       if (ret)
-                               return ret;
-                       size -= len;
-               } while (size);
-       }
-       return 0;
-}
-
 /* Read raw data from a file descriptor at the specified offset, feeding the
  * data it in chunks into the specified callback function.  */
 static int
@@ -672,37 +646,9 @@ read_partial_wim_resource(const struct wim_resource_descriptor *rdesc,
                return read_compressed_wim_resource(rdesc, &range, 1,
                                                    cb, cb_ctx);
        } else {
-               /* Reading uncompressed resource.  For completeness, handle the
-                * weird case where size_in_wim < uncompressed_size.  */
-
-               u64 read_size;
-               u64 zeroes_size;
-               int ret;
-
-               if (likely(offset + size <= rdesc->size_in_wim) ||
-                   rdesc->is_pipable)
-               {
-                       read_size = size;
-                       zeroes_size = 0;
-               } else {
-                       if (offset >= rdesc->size_in_wim) {
-                               read_size = 0;
-                               zeroes_size = size;
-                       } else {
-                               read_size = rdesc->size_in_wim - offset;
-                               zeroes_size = offset + size - rdesc->size_in_wim;
-                       }
-               }
-
-               ret = read_raw_file_data(&rdesc->wim->in_fd,
-                                        rdesc->offset_in_wim + offset,
-                                        read_size,
-                                        cb,
-                                        cb_ctx);
-               if (ret)
-                       return ret;
-
-               return fill_zeroes(zeroes_size, cb, cb_ctx);
+               return read_raw_file_data(&rdesc->wim->in_fd,
+                                         rdesc->offset_in_wim + offset,
+                                         size, cb, cb_ctx);
        }
 }
 
@@ -1438,17 +1384,6 @@ wim_res_hdr_to_desc(const struct wim_reshdr *reshdr, WIMStruct *wim,
        }
 }
 
-/* Convert a stand-alone resource descriptor to a WIM resource header.  */
-void
-wim_res_desc_to_hdr(const struct wim_resource_descriptor *rdesc,
-                   struct wim_reshdr *reshdr)
-{
-       reshdr->offset_in_wim     = rdesc->offset_in_wim;
-       reshdr->size_in_wim       = rdesc->size_in_wim;
-       reshdr->flags             = rdesc->flags;
-       reshdr->uncompressed_size = rdesc->uncompressed_size;
-}
-
 /* Translates a WIM resource header from the on-disk format into an in-memory
  * format.  */
 void