]> wimlib.net Git - wimlib/blobdiff - src/resource.c
Remove begin_stream callback flags
[wimlib] / src / resource.c
index d2a4c3098327797cd1022b7989e144fb7d474bf8..53283f2c3c5b3edf632331024910098e48b9bcf5 100644 (file)
@@ -37,7 +37,7 @@
 #include "wimlib/wim.h"
 
 #ifdef __WIN32__
-/* for read_win32_file_prefix(), read_win32_encrypted_file_prefix() */
+/* for read_winnt_file_prefix(), read_win32_encrypted_file_prefix() */
 #  include "wimlib/win32.h"
 #endif
 
@@ -138,6 +138,7 @@ read_compressed_wim_resource(const struct wim_resource_spec * const rspec,
        int errno_save;
 
        u64 *chunk_offsets = NULL;
+       u8 *_ubuf = NULL;
        u8 *ubuf = NULL;
        void *cbuf = NULL;
        bool chunk_offsets_malloced = false;
@@ -171,7 +172,7 @@ read_compressed_wim_resource(const struct wim_resource_spec * const rspec,
        /* Determine if we're reading a pipable resource from a pipe or not.  */
        const bool is_pipe_read = (rspec->is_pipable && !filedes_is_seekable(in_fd));
 
-       /* Determine if the chunk table is in an altenate format.  */
+       /* Determine if the chunk table is in an alternate format.  */
        const bool alt_chunk_table = (rspec->flags & WIM_RESHDR_FLAG_PACKED_STREAMS)
                                        && !is_pipe_read;
 
@@ -368,13 +369,14 @@ read_compressed_wim_resource(const struct wim_resource_spec * const rspec,
 
        /* Allocate buffer for holding the uncompressed data of each chunk.  */
        if (chunk_size <= STACK_MAX) {
-               ubuf = alloca(chunk_size);
+               _ubuf = alloca(chunk_size + 15);
        } else {
-               ubuf = MALLOC(chunk_size);
-               if (ubuf == NULL)
+               _ubuf = MALLOC(chunk_size + 15);
+               if (_ubuf == NULL)
                        goto oom;
                ubuf_malloced = true;
        }
+       ubuf = (u8 *)(((uintptr_t)_ubuf + 15) & ~15);
 
        /* Allocate a temporary buffer for reading compressed chunks, each of
         * which can be at most @chunk_size - 1 bytes.  This excludes compressed
@@ -548,7 +550,7 @@ out_free_memory:
        if (chunk_offsets_malloced)
                FREE(chunk_offsets);
        if (ubuf_malloced)
-               FREE(ubuf);
+               FREE(_ubuf);
        if (cbuf_malloced)
                FREE(cbuf);
        errno = errno_save;
@@ -1015,17 +1017,12 @@ streamifier_cb(const void *chunk, size_t size, void *_ctx)
        wimlib_assert(size <= ctx->cur_stream->size - ctx->cur_stream_offset);
 
        if (ctx->cur_stream_offset == 0) {
-               u32 flags;
 
                /* Starting a new stream.  */
                DEBUG("Begin new stream (size=%"PRIu64").",
                      ctx->cur_stream->size);
 
-               flags = BEGIN_STREAM_FLAG_PARTIAL_RESOURCE;
-               if (size == ctx->cur_stream->size)
-                       flags |= BEGIN_STREAM_FLAG_WHOLE_STREAM;
                ret = (*ctx->cbs.begin_stream)(ctx->cur_stream,
-                                              flags,
                                               ctx->cbs.begin_stream_ctx);
                if (ret)
                        return ret;
@@ -1071,8 +1068,7 @@ struct hasher_context {
 /* Callback for starting to read a stream while calculating its SHA1 message
  * digest.  */
 static int
-hasher_begin_stream(struct wim_lookup_table_entry *lte, u32 flags,
-                   void *_ctx)
+hasher_begin_stream(struct wim_lookup_table_entry *lte, void *_ctx)
 {
        struct hasher_context *ctx = _ctx;
 
@@ -1081,8 +1077,7 @@ hasher_begin_stream(struct wim_lookup_table_entry *lte, u32 flags,
        if (ctx->cbs.begin_stream == NULL)
                return 0;
        else
-               return (*ctx->cbs.begin_stream)(lte, flags,
-                                               ctx->cbs.begin_stream_ctx);
+               return (*ctx->cbs.begin_stream)(lte, ctx->cbs.begin_stream_ctx);
 }
 
 /* A consume_data_callback_t implementation that continues calculating the SHA1
@@ -1171,7 +1166,7 @@ read_full_stream_with_cbs(struct wim_lookup_table_entry *lte,
 {
        int ret;
 
-       ret = (*cbs->begin_stream)(lte, 0, cbs->begin_stream_ctx);
+       ret = (*cbs->begin_stream)(lte, cbs->begin_stream_ctx);
        if (ret)
                return ret;