#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
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
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);
}
}
}
}
-/* 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