#endif
#include "wimlib/assert.h"
+#include "wimlib/bitops.h"
#include "wimlib/endianness.h"
#include "wimlib/error.h"
#include "wimlib/file_io.h"
int errno_save;
u64 *chunk_offsets = NULL;
- u8 *_ubuf = NULL;
u8 *ubuf = NULL;
void *cbuf = NULL;
bool chunk_offsets_malloced = false;
}
}
- const u32 chunk_order = bsr32(chunk_size);
+ const u32 chunk_order = fls32(chunk_size);
/* Calculate the total number of chunks the resource is divided into. */
const u64 num_chunks = (rspec->uncompressed_size + chunk_size - 1) >> chunk_order;
/* Now fill in chunk_offsets from the entries we have read in
* chunk_tab_data. We break aliasing rules here to avoid having
* to allocate yet another array. */
- typedef le64 __attribute__((may_alias)) aliased_le64_t;
- typedef le32 __attribute__((may_alias)) aliased_le32_t;
+ typedef le64 _may_alias_attribute aliased_le64_t;
+ typedef le32 _may_alias_attribute aliased_le32_t;
u64 * chunk_offsets_p = chunk_offsets;
if (alt_chunk_table) {
/* Allocate buffer for holding the uncompressed data of each chunk. */
if (chunk_size <= STACK_MAX) {
- _ubuf = alloca(chunk_size + 15);
+ ubuf = alloca(chunk_size);
} else {
- _ubuf = MALLOC(chunk_size + 15);
- if (_ubuf == NULL)
+ ubuf = MALLOC(chunk_size);
+ 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
if (chunk_offsets_malloced)
FREE(chunk_offsets);
if (ubuf_malloced)
- FREE(_ubuf);
+ FREE(ubuf);
if (cbuf_malloced)
FREE(cbuf);
errno = errno_save;