#ifndef _WIMLIB_DECOMPRESS_COMMON_H
#define _WIMLIB_DECOMPRESS_COMMON_H
+#include <string.h>
+
#include "wimlib/compiler.h"
#include "wimlib/types.h"
#include "wimlib/unaligned.h"
if (unlikely(is->end - is->next < 2))
goto overflow;
- is->bitbuf |= (u32)get_unaligned_u16_le(is->next) << (16 - is->bitsleft);
+ is->bitbuf |= (u32)get_unaligned_le16(is->next) << (16 - is->bitsleft);
is->next += 2;
is->bitsleft += 16;
if (unlikely(is->end - is->next < 2))
goto overflow;
- is->bitbuf |= (u32)get_unaligned_u16_le(is->next);
+ is->bitbuf |= (u32)get_unaligned_le16(is->next);
is->next += 2;
is->bitsleft = 32;
}
if (unlikely(is->end - is->next < 2))
return 0;
- v = get_unaligned_u16_le(is->next);
+ v = get_unaligned_le16(is->next);
is->next += 2;
return v;
}
if (unlikely(is->end - is->next < 4))
return 0;
- v = get_unaligned_u32_le(is->next);
+ v = get_unaligned_le32(is->next);
is->next += 4;
return v;
}
-/* Read an array of literal bytes embedded in the bitstream. Return a pointer
- * to the resulting array, or NULL if the read overflows the input buffer. */
-static inline const u8 *
-bitstream_read_bytes(struct input_bitstream *is, size_t count)
+/* Read into @dst_buffer an array of literal bytes embedded in the bitstream.
+ * Return either a pointer to the byte past the last written, or NULL if the
+ * read overflows the input buffer. */
+static inline void *
+bitstream_read_bytes(struct input_bitstream *is, void *dst_buffer, size_t count)
{
- const u8 *p;
-
if (unlikely(is->end - is->next < count))
return NULL;
- p = is->next;
+ memcpy(dst_buffer, is->next, count);
is->next += count;
- return p;
+ return (u8 *)dst_buffer + count;
}
/* Align the input bitstream on a coding-unit boundary. */
{
machine_word_t v;
- BUILD_BUG_ON(WORDSIZE != 4 && WORDSIZE != 8);
+ STATIC_ASSERT(WORDSIZE == 4 || WORDSIZE == 8);
v = b;
v |= v << 8;