wuffs gen -version=0.2.0-alpha.44
diff --git a/release/c/wuffs-v0.2.c b/release/c/wuffs-v0.2.c
index 542f279..2a0215b 100644
--- a/release/c/wuffs-v0.2.c
+++ b/release/c/wuffs-v0.2.c
@@ -60,15 +60,15 @@
// each major.minor branch, the commit count should increase monotonically.
//
// WUFFS_VERSION was overridden by "wuffs gen -version" based on revision
-// 4a85e39d878e22e42bc4e81b11b7ecc0e73dbc96 committed on 2019-06-16.
+// 3037f1e389b54f9721161cc92c9b00372254cafc committed on 2019-07-07.
#define WUFFS_VERSION ((uint64_t)0x0000000000020000)
#define WUFFS_VERSION_MAJOR ((uint64_t)0x00000000)
#define WUFFS_VERSION_MINOR ((uint64_t)0x0002)
#define WUFFS_VERSION_PATCH ((uint64_t)0x0000)
-#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.43"
-#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 1739
-#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20190616
-#define WUFFS_VERSION_STRING "0.2.0-alpha.43+1739.20190616"
+#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.44"
+#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 1776
+#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20190707
+#define WUFFS_VERSION_STRING "0.2.0-alpha.44+1776.20190707"
// Define WUFFS_CONFIG__STATIC_FUNCTIONS to make all of Wuffs' functions have
// static storage. The motivation is discussed in the "ALLOW STATIC
@@ -1274,34 +1274,8 @@
#endif // __cplusplus
// ---------------- I/O
-
-struct wuffs_base__io_buffer__struct;
-
-typedef struct {
- // Do not access the private_impl's fields directly. There is no API/ABI
- // compatibility or safety guarantee if you do so.
- struct {
- struct wuffs_base__io_buffer__struct* buf;
- // The bounds values are typically NULL, when created by the Wuffs public
- // API. NULL means that the callee substitutes the implicit bounds derived
- // from buf.
- uint8_t* mark;
- uint8_t* limit;
- } private_impl;
-} wuffs_base__io_reader;
-
-typedef struct {
- // Do not access the private_impl's fields directly. There is no API/ABI
- // compatibility or safety guarantee if you do so.
- struct {
- struct wuffs_base__io_buffer__struct* buf;
- // The bounds values are typically NULL, when created by the Wuffs public
- // API. NULL means that the callee substitutes the implicit bounds derived
- // from buf.
- uint8_t* mark;
- uint8_t* limit;
- } private_impl;
-} wuffs_base__io_writer;
+//
+// See (/doc/note/io-input-output.md).
// wuffs_base__io_buffer_meta is the metadata for a wuffs_base__io_buffer's
// data.
@@ -1322,8 +1296,8 @@
#ifdef __cplusplus
inline void compact();
- inline wuffs_base__io_reader reader();
- inline wuffs_base__io_writer writer();
+ inline wuffs_base__io_buffer__struct* reader(); // Deprecated.
+ inline wuffs_base__io_buffer__struct* writer(); // Deprecated.
inline uint64_t reader_available() const;
inline uint64_t reader_io_position() const;
inline uint64_t writer_available() const;
@@ -1376,24 +1350,6 @@
return ret;
}
-static inline wuffs_base__io_reader //
-wuffs_base__null_io_reader() {
- wuffs_base__io_reader ret;
- ret.private_impl.buf = NULL;
- ret.private_impl.mark = NULL;
- ret.private_impl.limit = NULL;
- return ret;
-}
-
-static inline wuffs_base__io_writer //
-wuffs_base__null_io_writer() {
- wuffs_base__io_writer ret;
- ret.private_impl.buf = NULL;
- ret.private_impl.mark = NULL;
- ret.private_impl.limit = NULL;
- return ret;
-}
-
// wuffs_base__io_buffer__compact moves any written but unread bytes to the
// start of the buffer.
static inline void //
@@ -1410,24 +1366,6 @@
buf->meta.ri = 0;
}
-static inline wuffs_base__io_reader //
-wuffs_base__io_buffer__reader(wuffs_base__io_buffer* buf) {
- wuffs_base__io_reader ret;
- ret.private_impl.buf = buf;
- ret.private_impl.mark = NULL;
- ret.private_impl.limit = NULL;
- return ret;
-}
-
-static inline wuffs_base__io_writer //
-wuffs_base__io_buffer__writer(wuffs_base__io_buffer* buf) {
- wuffs_base__io_writer ret;
- ret.private_impl.buf = buf;
- ret.private_impl.mark = NULL;
- ret.private_impl.limit = NULL;
- return ret;
-}
-
static inline uint64_t //
wuffs_base__io_buffer__reader_available(const wuffs_base__io_buffer* buf) {
return buf ? buf->meta.wi - buf->meta.ri : 0;
@@ -1455,14 +1393,14 @@
wuffs_base__io_buffer__compact(this);
}
-inline wuffs_base__io_reader //
+inline wuffs_base__io_buffer* //
wuffs_base__io_buffer__struct::reader() {
- return wuffs_base__io_buffer__reader(this);
+ return this;
}
-inline wuffs_base__io_writer //
+inline wuffs_base__io_buffer* //
wuffs_base__io_buffer__struct::writer() {
- return wuffs_base__io_buffer__writer(this);
+ return this;
}
inline uint64_t //
@@ -3001,8 +2939,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_deflate__decoder__decode_io_writer(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
// ---------------- Struct Definitions
@@ -3120,8 +3058,8 @@
}
inline wuffs_base__status //
- decode_io_writer(wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ decode_io_writer(wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
return wuffs_deflate__decoder__decode_io_writer(this, a_dst, a_src,
a_workbuf);
@@ -3192,8 +3130,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_lzw__decoder__decode_io_writer(wuffs_lzw__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
WUFFS_BASE__MAYBE_STATIC wuffs_base__slice_u8 //
@@ -3290,8 +3228,8 @@
}
inline wuffs_base__status //
- decode_io_writer(wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ decode_io_writer(wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
return wuffs_lzw__decoder__decode_io_writer(this, a_dst, a_src, a_workbuf);
}
@@ -3414,7 +3352,7 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__decode_image_config(wuffs_gif__decoder* self,
wuffs_base__image_config* a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct //
wuffs_gif__decoder__set_report_metadata(wuffs_gif__decoder* self,
@@ -3423,7 +3361,7 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__ack_metadata_chunk(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC uint32_t //
wuffs_gif__decoder__metadata_fourcc(const wuffs_gif__decoder* self);
@@ -3454,12 +3392,12 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__decode_frame_config(wuffs_gif__decoder* self,
wuffs_base__frame_config* a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__decode_frame(wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
@@ -3641,7 +3579,7 @@
inline wuffs_base__status //
decode_image_config(wuffs_base__image_config* a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
return wuffs_gif__decoder__decode_image_config(this, a_dst, a_src);
}
@@ -3651,7 +3589,7 @@
}
inline wuffs_base__status //
- ack_metadata_chunk(wuffs_base__io_reader a_src) {
+ ack_metadata_chunk(wuffs_base__io_buffer* a_src) {
return wuffs_gif__decoder__ack_metadata_chunk(this, a_src);
}
@@ -3697,13 +3635,13 @@
inline wuffs_base__status //
decode_frame_config(wuffs_base__frame_config* a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
return wuffs_gif__decoder__decode_frame_config(this, a_dst, a_src);
}
inline wuffs_base__status //
decode_frame(wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts) {
return wuffs_gif__decoder__decode_frame(this, a_dst, a_src, a_workbuf,
@@ -3777,8 +3715,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gzip__decoder__decode_io_writer(wuffs_gzip__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
// ---------------- Struct Definitions
@@ -3865,8 +3803,8 @@
}
inline wuffs_base__status //
- decode_io_writer(wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ decode_io_writer(wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
return wuffs_gzip__decoder__decode_io_writer(this, a_dst, a_src, a_workbuf);
}
@@ -3938,8 +3876,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_zlib__decoder__decode_io_writer(wuffs_zlib__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
// ---------------- Struct Definitions
@@ -4023,8 +3961,8 @@
}
inline wuffs_base__status //
- decode_io_writer(wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ decode_io_writer(wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
return wuffs_zlib__decoder__decode_io_writer(this, a_dst, a_src, a_workbuf);
}
@@ -4519,65 +4457,52 @@
// ---------------- I/O
-static inline bool //
-wuffs_base__io_buffer__is_valid(wuffs_base__io_buffer buf) {
- return (buf.data.ptr || (buf.data.len == 0)) &&
- (buf.data.len >= buf.meta.wi) && (buf.meta.wi >= buf.meta.ri);
-}
-
-// TODO: wuffs_base__io_reader__is_eof is no longer used by Wuffs per se, but
-// it might be handy to programs that use Wuffs. Either delete it, or promote
-// it to the public API.
+// "Null" as in "/dev/null", not as in "nullptr".
//
-// If making this function public (i.e. moving it to base-header.h), it also
-// needs to allow NULL (i.e. implicit, callee-calculated) mark/limit.
+// TODO: ensure that this is zero-initialized.
+static wuffs_base__io_buffer wuffs_base__global__null_io_buffer;
-static inline bool //
-wuffs_base__io_reader__is_eof(wuffs_base__io_reader o) {
- wuffs_base__io_buffer* buf = o.private_impl.buf;
- return buf && buf->meta.closed &&
- (buf->data.ptr + buf->meta.wi == o.private_impl.limit);
+static inline wuffs_base__io_buffer* //
+wuffs_base__null_io_reader() {
+ return &wuffs_base__global__null_io_buffer;
}
-static inline bool //
-wuffs_base__io_reader__is_valid(wuffs_base__io_reader o) {
- wuffs_base__io_buffer* buf = o.private_impl.buf;
- // Note: if making this function public (i.e. moving it to base-header.h), it
- // also needs to allow NULL (i.e. implicit, callee-calculated) mark/limit.
- return buf ? ((buf->data.ptr <= o.private_impl.mark) &&
- (o.private_impl.mark <= o.private_impl.limit) &&
- (o.private_impl.limit <= buf->data.ptr + buf->data.len))
- : ((o.private_impl.mark == NULL) &&
- (o.private_impl.limit == NULL));
+static inline wuffs_base__io_buffer* //
+wuffs_base__null_io_writer() {
+ return &wuffs_base__global__null_io_buffer;
}
-static inline bool //
-wuffs_base__io_writer__is_valid(wuffs_base__io_writer o) {
- wuffs_base__io_buffer* buf = o.private_impl.buf;
- // Note: if making this function public (i.e. moving it to base-header.h), it
- // also needs to allow NULL (i.e. implicit, callee-calculated) mark/limit.
- return buf ? ((buf->data.ptr <= o.private_impl.mark) &&
- (o.private_impl.mark <= o.private_impl.limit) &&
- (o.private_impl.limit <= buf->data.ptr + buf->data.len))
- : ((o.private_impl.mark == NULL) &&
- (o.private_impl.limit == NULL));
+static inline uint64_t //
+wuffs_base__io__count_since(uint64_t mark, uint64_t index) {
+ if (index >= mark) {
+ return index - mark;
+ }
+ return 0;
+}
+
+static inline wuffs_base__slice_u8 //
+wuffs_base__io__since(uint64_t mark, uint64_t index, uint8_t* ptr) {
+ if (index >= mark) {
+ return wuffs_base__make_slice_u8(ptr + mark, index - mark);
+ }
+ return wuffs_base__make_slice_u8(NULL, 0);
}
static inline uint32_t //
wuffs_base__io_writer__copy_n_from_history(uint8_t** ptr_iop_w,
- uint8_t* io0_w,
uint8_t* io1_w,
+ uint8_t* io2_w,
uint32_t length,
uint32_t distance) {
if (!distance) {
return 0;
}
uint8_t* p = *ptr_iop_w;
- if ((size_t)(p - io0_w) < (size_t)(distance)) {
+ if ((size_t)(p - io1_w) < (size_t)(distance)) {
return 0;
}
uint8_t* q = p - distance;
- size_t n = (size_t)(io1_w - p);
+ size_t n = (size_t)(io2_w - p);
if ((size_t)(length) > n) {
length = (uint32_t)(n);
} else {
@@ -4609,12 +4534,12 @@
// wuffs_base__io_writer__copy_n_from_history function above, but has stronger
// pre-conditions. The caller needs to prove that:
// - distance > 0
-// - distance <= (*ptr_iop_w - io0_w)
-// - length <= (io1_w - *ptr_iop_w)
+// - distance <= (*ptr_iop_w - io1_w)
+// - length <= (io2_w - *ptr_iop_w)
static inline uint32_t //
wuffs_base__io_writer__copy_n_from_history_fast(uint8_t** ptr_iop_w,
- uint8_t* io0_w,
uint8_t* io1_w,
+ uint8_t* io2_w,
uint32_t length,
uint32_t distance) {
uint8_t* p = *ptr_iop_w;
@@ -4634,18 +4559,18 @@
static inline uint32_t //
wuffs_base__io_writer__copy_n_from_reader(uint8_t** ptr_iop_w,
- uint8_t* io1_w,
+ uint8_t* io2_w,
uint32_t length,
uint8_t** ptr_iop_r,
- uint8_t* io1_r) {
+ uint8_t* io2_r) {
uint8_t* iop_w = *ptr_iop_w;
size_t n = length;
- if (n > ((size_t)(io1_w - iop_w))) {
- n = (size_t)(io1_w - iop_w);
+ if (n > ((size_t)(io2_w - iop_w))) {
+ n = (size_t)(io2_w - iop_w);
}
uint8_t* iop_r = *ptr_iop_r;
- if (n > ((size_t)(io1_r - iop_r))) {
- n = (size_t)(io1_r - iop_r);
+ if (n > ((size_t)(io2_r - iop_r))) {
+ n = (size_t)(io2_r - iop_r);
}
if (n > 0) {
memmove(iop_w, iop_r, n);
@@ -4657,12 +4582,12 @@
static inline uint64_t //
wuffs_base__io_writer__copy_from_slice(uint8_t** ptr_iop_w,
- uint8_t* io1_w,
+ uint8_t* io2_w,
wuffs_base__slice_u8 src) {
uint8_t* iop_w = *ptr_iop_w;
size_t n = src.len;
- if (n > ((size_t)(io1_w - iop_w))) {
- n = (size_t)(io1_w - iop_w);
+ if (n > ((size_t)(io2_w - iop_w))) {
+ n = (size_t)(io2_w - iop_w);
}
if (n > 0) {
memmove(iop_w, src.ptr, n);
@@ -4673,7 +4598,7 @@
static inline uint32_t //
wuffs_base__io_writer__copy_n_from_slice(uint8_t** ptr_iop_w,
- uint8_t* io1_w,
+ uint8_t* io2_w,
uint32_t length,
wuffs_base__slice_u8 src) {
uint8_t* iop_w = *ptr_iop_w;
@@ -4681,8 +4606,8 @@
if (n > length) {
n = length;
}
- if (n > ((size_t)(io1_w - iop_w))) {
- n = (size_t)(io1_w - iop_w);
+ if (n > ((size_t)(io2_w - iop_w))) {
+ n = (size_t)(io2_w - iop_w);
}
if (n > 0) {
memmove(iop_w, src.ptr, n);
@@ -4691,11 +4616,12 @@
return (uint32_t)(n);
}
-static inline wuffs_base__empty_struct //
-wuffs_base__io_reader__set(wuffs_base__io_reader* o,
- wuffs_base__io_buffer* b,
+static inline wuffs_base__io_buffer* //
+wuffs_base__io_reader__set(wuffs_base__io_buffer* b,
uint8_t** ptr_iop_r,
+ uint8_t** ptr_io0_r,
uint8_t** ptr_io1_r,
+ uint8_t** ptr_io2_r,
wuffs_base__slice_u8 data) {
b->data = data;
b->meta.wi = data.len;
@@ -4703,42 +4629,17 @@
b->meta.pos = 0;
b->meta.closed = false;
- o->private_impl.buf = b;
- o->private_impl.mark = data.ptr;
- o->private_impl.limit = data.ptr + data.len;
*ptr_iop_r = data.ptr;
- *ptr_io1_r = data.ptr + data.len;
+ *ptr_io0_r = data.ptr;
+ *ptr_io1_r = data.ptr;
+ *ptr_io2_r = data.ptr + data.len;
- wuffs_base__empty_struct ret;
- ret.private_impl = 0;
- return ret;
-}
-
-static inline wuffs_base__empty_struct //
-wuffs_base__io_reader__set_limit(wuffs_base__io_reader* o,
- uint8_t* iop_r,
- uint64_t limit) {
- if (o && (((size_t)(o->private_impl.limit - iop_r)) > limit)) {
- o->private_impl.limit = iop_r + limit;
- }
-
- wuffs_base__empty_struct ret;
- ret.private_impl = 0;
- return ret;
-}
-
-static inline wuffs_base__empty_struct //
-wuffs_base__io_reader__set_mark(wuffs_base__io_reader* o, uint8_t* mark) {
- o->private_impl.mark = mark;
-
- wuffs_base__empty_struct ret;
- ret.private_impl = 0;
- return ret;
+ return b;
}
static inline wuffs_base__slice_u8 //
-wuffs_base__io_reader__take(uint8_t** ptr_iop_r, uint8_t* io1_r, uint64_t n) {
- if (n <= ((size_t)(io1_r - *ptr_iop_r))) {
+wuffs_base__io_reader__take(uint8_t** ptr_iop_r, uint8_t* io2_r, uint64_t n) {
+ if (n <= ((size_t)(io2_r - *ptr_iop_r))) {
uint8_t* p = *ptr_iop_r;
*ptr_iop_r += n;
return wuffs_base__make_slice_u8(p, n);
@@ -4746,11 +4647,12 @@
return wuffs_base__make_slice_u8(NULL, 0);
}
-static inline wuffs_base__empty_struct //
-wuffs_base__io_writer__set(wuffs_base__io_writer* o,
- wuffs_base__io_buffer* b,
+static inline wuffs_base__io_buffer* //
+wuffs_base__io_writer__set(wuffs_base__io_buffer* b,
uint8_t** ptr_iop_w,
+ uint8_t** ptr_io0_w,
uint8_t** ptr_io1_w,
+ uint8_t** ptr_io2_w,
wuffs_base__slice_u8 data) {
b->data = data;
b->meta.wi = 0;
@@ -4758,24 +4660,12 @@
b->meta.pos = 0;
b->meta.closed = false;
- o->private_impl.buf = b;
- o->private_impl.mark = data.ptr;
- o->private_impl.limit = data.ptr + data.len;
*ptr_iop_w = data.ptr;
- *ptr_io1_w = data.ptr + data.len;
+ *ptr_io0_w = data.ptr;
+ *ptr_io1_w = data.ptr;
+ *ptr_io2_w = data.ptr + data.len;
- wuffs_base__empty_struct ret;
- ret.private_impl = 0;
- return ret;
-}
-
-static inline wuffs_base__empty_struct //
-wuffs_base__io_writer__set_mark(wuffs_base__io_writer* o, uint8_t* mark) {
- o->private_impl.mark = mark;
-
- wuffs_base__empty_struct ret;
- ret.private_impl = 0;
- return ret;
+ return b;
}
// ---------------- I/O (Utility)
@@ -6381,20 +6271,20 @@
static wuffs_base__status //
wuffs_deflate__decoder__decode_blocks(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_deflate__decoder__decode_uncompressed(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_deflate__decoder__init_fixed_huffman(wuffs_deflate__decoder* self);
static wuffs_base__status //
wuffs_deflate__decoder__init_dynamic_huffman(wuffs_deflate__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_deflate__decoder__init_huff(wuffs_deflate__decoder* self,
@@ -6405,13 +6295,13 @@
static wuffs_base__status //
wuffs_deflate__decoder__decode_huffman_fast(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_deflate__decoder__decode_huffman_slow(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src);
// ---------------- Initializer Implementations
@@ -6486,8 +6376,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_deflate__decoder__decode_io_writer(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__error__bad_receiver;
@@ -6497,6 +6387,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_dst || !a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 1)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -6505,6 +6399,7 @@
self->private_impl.active_coroutine = 0;
wuffs_base__status status = NULL;
+ uint64_t v_mark = 0;
wuffs_base__status v_status = NULL;
wuffs_base__slice_u8 v_written = {0};
uint64_t v_n_copied = 0;
@@ -6513,19 +6408,15 @@
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
@@ -6535,17 +6426,15 @@
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0;
while (true) {
- wuffs_base__io_writer__set_mark(&a_dst, iop_a_dst);
+ v_mark = ((uint64_t)(iop_a_dst - io0_a_dst));
{
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
wuffs_base__status t_0 =
wuffs_deflate__decoder__decode_blocks(self, a_dst, a_src);
- if (a_dst.private_impl.buf) {
- iop_a_dst = a_dst.private_impl.buf->data.ptr +
- a_dst.private_impl.buf->meta.wi;
+ if (a_dst) {
+ iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
}
v_status = t_0;
}
@@ -6559,9 +6448,8 @@
}
goto ok;
}
- v_written = wuffs_base__make_slice_u8(
- a_dst.private_impl.mark,
- (size_t)(iop_a_dst - a_dst.private_impl.mark));
+ v_written = wuffs_base__io__since(
+ v_mark, ((uint64_t)(iop_a_dst - io0_a_dst)), io0_a_dst);
if (((uint64_t)(v_written.len)) >= 32768) {
v_written = wuffs_base__slice_u8__suffix(v_written, 32768);
wuffs_base__slice_u8__copy_from_slice(
@@ -6610,9 +6498,8 @@
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
if (wuffs_base__status__is_error(status)) {
@@ -6625,8 +6512,8 @@
static wuffs_base__status //
wuffs_deflate__decoder__decode_blocks(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint32_t v_final = 0;
@@ -6637,16 +6524,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_blocks[0];
@@ -6661,7 +6544,7 @@
while (self->private_impl.f_n_bits < 3) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -6676,16 +6559,14 @@
self->private_impl.f_bits >>= 3;
self->private_impl.f_n_bits -= 3;
if (v_type == 0) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
status =
wuffs_deflate__decoder__decode_uncompressed(self, a_dst, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -6704,15 +6585,13 @@
goto ok;
}
} else if (v_type == 2) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
status = wuffs_deflate__decoder__init_dynamic_huffman(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -6723,15 +6602,13 @@
}
self->private_impl.f_end_of_block = false;
while (true) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
v_status =
wuffs_deflate__decoder__decode_huffman_fast(self, a_dst, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (wuffs_base__status__is_error(v_status)) {
status = v_status;
@@ -6740,16 +6617,14 @@
if (self->private_impl.f_end_of_block) {
goto label_0_continue;
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
status =
wuffs_deflate__decoder__decode_huffman_slow(self, a_dst, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -6774,9 +6649,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -6786,8 +6660,8 @@
static wuffs_base__status //
wuffs_deflate__decoder__decode_uncompressed(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint32_t v_length = 0;
@@ -6796,33 +6670,25 @@
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_uncompressed[0];
@@ -6843,14 +6709,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
uint32_t t_0;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 4)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 4)) {
t_0 = wuffs_base__load_u32le(iop_a_src);
iop_a_src += 4;
} else {
self->private_data.s_decode_uncompressed[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -6877,13 +6743,13 @@
v_length = ((v_length)&0xFFFF);
while (true) {
v_n_copied = wuffs_base__io_writer__copy_n_from_reader(
- &iop_a_dst, io1_a_dst, v_length, &iop_a_src, io1_a_src);
+ &iop_a_dst, io2_a_dst, v_length, &iop_a_src, io2_a_src);
if (v_length <= v_n_copied) {
status = NULL;
goto ok;
}
v_length -= v_n_copied;
- if (((uint64_t)(io1_a_dst - iop_a_dst)) == 0) {
+ if (((uint64_t)(io2_a_dst - iop_a_dst)) == 0) {
status = wuffs_base__suspension__short_write;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(3);
} else {
@@ -6906,13 +6772,11 @@
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -6960,7 +6824,7 @@
static wuffs_base__status //
wuffs_deflate__decoder__init_dynamic_huffman(wuffs_deflate__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint32_t v_bits = 0;
@@ -6984,16 +6848,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_init_dynamic_huffman[0];
@@ -7019,7 +6879,7 @@
while (v_n_bits < 14) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7049,7 +6909,7 @@
while (v_n_bits < 3) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7088,7 +6948,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7137,7 +6997,7 @@
while (v_n_bits < v_n_extra_bits) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7206,9 +7066,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -7473,8 +7332,8 @@
static wuffs_base__status //
wuffs_deflate__decoder__decode_huffman_fast(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint32_t v_bits = 0;
@@ -7494,33 +7353,25 @@
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
if ((self->private_impl.f_n_bits >= 8) ||
@@ -7533,8 +7384,8 @@
v_lmask = ((((uint32_t)(1)) << self->private_impl.f_n_huffs_bits[0]) - 1);
v_dmask = ((((uint32_t)(1)) << self->private_impl.f_n_huffs_bits[1]) - 1);
label_0_continue:;
- while ((((uint64_t)(io1_a_dst - iop_a_dst)) >= 258) &&
- (((uint64_t)(io1_a_src - iop_a_src)) >= 12)) {
+ while ((((uint64_t)(io2_a_dst - iop_a_dst)) >= 258) &&
+ (((uint64_t)(io2_a_src - iop_a_src)) >= 12)) {
if (v_n_bits < 15) {
v_bits |= (((uint32_t)(wuffs_base__load_u8be(iop_a_src))) << v_n_bits);
(iop_a_src += 1, wuffs_base__make_empty_struct());
@@ -7686,11 +7537,10 @@
v_n_copied = 0;
while (true) {
if (((uint64_t)((v_dist_minus_1 + 1))) >
- ((uint64_t)(iop_a_dst - a_dst.private_impl.mark))) {
+ ((uint64_t)(iop_a_dst - a_dst->data.ptr))) {
v_hlen = 0;
- v_hdist =
- ((uint32_t)((((uint64_t)((v_dist_minus_1 + 1))) -
- ((uint64_t)(iop_a_dst - a_dst.private_impl.mark)))));
+ v_hdist = ((uint32_t)((((uint64_t)((v_dist_minus_1 + 1))) -
+ ((uint64_t)(iop_a_dst - a_dst->data.ptr)))));
if (v_length > v_hdist) {
v_length -= v_hdist;
v_hlen = v_hdist;
@@ -7705,7 +7555,7 @@
v_hdist = (self->private_impl.f_history_index - v_hdist);
while (true) {
v_n_copied = wuffs_base__io_writer__copy_n_from_slice(
- &iop_a_dst, io1_a_dst, v_hlen,
+ &iop_a_dst, io2_a_dst, v_hlen,
wuffs_base__slice_u8__subslice_i(
wuffs_base__make_slice_u8(self->private_data.f_history,
32768),
@@ -7715,7 +7565,7 @@
}
v_hlen -= v_n_copied;
wuffs_base__io_writer__copy_n_from_slice(
- &iop_a_dst, io1_a_dst, v_hlen,
+ &iop_a_dst, io2_a_dst, v_hlen,
wuffs_base__make_slice_u8(self->private_data.f_history, 32768));
goto label_1_break;
}
@@ -7724,13 +7574,13 @@
goto label_0_continue;
}
if (((uint64_t)((v_dist_minus_1 + 1))) >
- ((uint64_t)(iop_a_dst - a_dst.private_impl.mark))) {
+ ((uint64_t)(iop_a_dst - a_dst->data.ptr))) {
status = wuffs_deflate__error__internal_error_inconsistent_distance;
goto exit;
}
}
wuffs_base__io_writer__copy_n_from_history_fast(
- &iop_a_dst, a_dst.private_impl.mark, io1_a_dst, v_length,
+ &iop_a_dst, a_dst->data.ptr, io2_a_dst, v_length,
(v_dist_minus_1 + 1));
goto label_2_break;
}
@@ -7739,7 +7589,7 @@
label_0_break:;
while (v_n_bits >= 8) {
v_n_bits -= 8;
- if (iop_a_src > io0_a_src) {
+ if (iop_a_src > io1_a_src) {
(iop_a_src--, wuffs_base__make_empty_struct());
} else {
status = wuffs_deflate__error__internal_error_inconsistent_i_o;
@@ -7755,13 +7605,11 @@
}
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -7771,8 +7619,8 @@
static wuffs_base__status //
wuffs_deflate__decoder__decode_huffman_slow(wuffs_deflate__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint32_t v_bits = 0;
@@ -7798,33 +7646,25 @@
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_huffman_slow[0];
@@ -7868,7 +7708,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7881,7 +7721,7 @@
label_1_break:;
if ((v_table_entry >> 31) != 0) {
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- if (iop_a_dst == io1_a_dst) {
+ if (iop_a_dst == io2_a_dst) {
status = wuffs_base__suspension__short_write;
goto suspend;
}
@@ -7906,7 +7746,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7919,7 +7759,7 @@
label_2_break:;
if ((v_table_entry >> 31) != 0) {
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
- if (iop_a_dst == io1_a_dst) {
+ if (iop_a_dst == io2_a_dst) {
status = wuffs_base__suspension__short_write;
goto suspend;
}
@@ -7955,7 +7795,7 @@
while (v_n_bits < v_table_entry_n_bits) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -7983,7 +7823,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -8009,7 +7849,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -8036,7 +7876,7 @@
while (v_n_bits < v_table_entry_n_bits) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -8055,10 +7895,9 @@
}
while (true) {
if (((uint64_t)((v_dist_minus_1 + 1))) >
- ((uint64_t)(iop_a_dst - a_dst.private_impl.mark))) {
- v_hdist =
- ((uint32_t)((((uint64_t)((v_dist_minus_1 + 1))) -
- ((uint64_t)(iop_a_dst - a_dst.private_impl.mark)))));
+ ((uint64_t)(iop_a_dst - a_dst->data.ptr))) {
+ v_hdist = ((uint32_t)((((uint64_t)((v_dist_minus_1 + 1))) -
+ ((uint64_t)(iop_a_dst - a_dst->data.ptr)))));
if (v_length > v_hdist) {
v_length -= v_hdist;
v_hlen = v_hdist;
@@ -8073,7 +7912,7 @@
v_hdist = (self->private_impl.f_history_index - v_hdist);
while (true) {
v_n_copied = wuffs_base__io_writer__copy_n_from_slice(
- &iop_a_dst, io1_a_dst, v_hlen,
+ &iop_a_dst, io2_a_dst, v_hlen,
wuffs_base__slice_u8__subslice_i(
wuffs_base__make_slice_u8(self->private_data.f_history,
32768),
@@ -8096,7 +7935,7 @@
if (v_hlen > 0) {
while (true) {
v_n_copied = wuffs_base__io_writer__copy_n_from_slice(
- &iop_a_dst, io1_a_dst, v_hlen,
+ &iop_a_dst, io2_a_dst, v_hlen,
wuffs_base__slice_u8__subslice_i(
wuffs_base__make_slice_u8(self->private_data.f_history,
32768),
@@ -8117,7 +7956,7 @@
}
}
v_n_copied = wuffs_base__io_writer__copy_n_from_history(
- &iop_a_dst, a_dst.private_impl.mark, io1_a_dst, v_length,
+ &iop_a_dst, a_dst->data.ptr, io2_a_dst, v_length,
(v_dist_minus_1 + 1));
if (v_length <= v_n_copied) {
v_length = 0;
@@ -8165,13 +8004,11 @@
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -8196,11 +8033,11 @@
static wuffs_base__empty_struct //
wuffs_lzw__decoder__read_from(wuffs_lzw__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_lzw__decoder__write_to(wuffs_lzw__decoder* self,
- wuffs_base__io_writer a_dst);
+ wuffs_base__io_buffer* a_dst);
// ---------------- Initializer Implementations
@@ -8294,8 +8131,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_lzw__decoder__decode_io_writer(wuffs_lzw__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__error__bad_receiver;
@@ -8305,6 +8142,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_dst || !a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 1)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -8394,7 +8235,7 @@
static wuffs_base__empty_struct //
wuffs_lzw__decoder__read_from(wuffs_lzw__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
uint32_t v_clear_code = 0;
uint32_t v_end_code = 0;
uint32_t v_save_code = 0;
@@ -8414,16 +8255,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
v_clear_code = self->private_impl.f_clear_code;
@@ -8436,11 +8273,11 @@
v_output_wi = self->private_impl.f_output_wi;
while (true) {
if (v_n_bits < v_width) {
- if (((uint64_t)(io1_a_src - iop_a_src)) >= 4) {
+ if (((uint64_t)(io2_a_src - iop_a_src)) >= 4) {
v_bits |= (wuffs_base__load_u32le(iop_a_src) << v_n_bits);
(iop_a_src += ((31 - v_n_bits) >> 3), wuffs_base__make_empty_struct());
v_n_bits |= 24;
- } else if (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ } else if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
self->private_impl.f_read_from_return_value = 2;
goto label_0_break;
} else {
@@ -8448,7 +8285,7 @@
(iop_a_src += 1, wuffs_base__make_empty_struct());
v_n_bits += 8;
if (v_n_bits >= v_width) {
- } else if (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ } else if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
self->private_impl.f_read_from_return_value = 2;
goto label_0_break;
} else {
@@ -8563,7 +8400,7 @@
if (self->private_impl.f_read_from_return_value != 2) {
while (v_n_bits >= 8) {
v_n_bits -= 8;
- if (iop_a_src > io0_a_src) {
+ if (iop_a_src > io1_a_src) {
(iop_a_src--, wuffs_base__make_empty_struct());
} else {
self->private_impl.f_read_from_return_value = 4;
@@ -8578,9 +8415,8 @@
self->private_impl.f_bits = v_bits;
self->private_impl.f_n_bits = v_n_bits;
self->private_impl.f_output_wi = v_output_wi;
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return wuffs_base__make_empty_struct();
@@ -8590,7 +8426,7 @@
static wuffs_base__status //
wuffs_lzw__decoder__write_to(wuffs_lzw__decoder* self,
- wuffs_base__io_writer a_dst) {
+ wuffs_base__io_buffer* a_dst) {
wuffs_base__status status = NULL;
wuffs_base__slice_u8 v_s = {0};
@@ -8599,19 +8435,15 @@
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint32_t coro_susp_point = self->private_impl.p_write_to[0];
@@ -8628,7 +8460,7 @@
v_s = wuffs_base__slice_u8__subslice_ij(
wuffs_base__make_slice_u8(self->private_data.f_output, 8199),
self->private_impl.f_output_ri, self->private_impl.f_output_wi);
- v_n = wuffs_base__io_writer__copy_from_slice(&iop_a_dst, io1_a_dst, v_s);
+ v_n = wuffs_base__io_writer__copy_from_slice(&iop_a_dst, io2_a_dst, v_s);
if (v_n == ((uint64_t)(v_s.len))) {
self->private_impl.f_output_ri = 0;
self->private_impl.f_output_wi = 0;
@@ -8655,9 +8487,8 @@
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
return status;
@@ -8746,52 +8577,52 @@
static wuffs_base__status //
wuffs_gif__decoder__skip_frame(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__empty_struct //
wuffs_gif__decoder__reset_gc(wuffs_gif__decoder* self);
static wuffs_base__status //
wuffs_gif__decoder__decode_up_to_id_part1(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_header(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_lsd(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_extension(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__skip_blocks(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_ae(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_gc(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_id_part0(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_id_part1(wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src);
+ wuffs_base__io_buffer* a_src);
static wuffs_base__status //
wuffs_gif__decoder__decode_id_part2(wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
static wuffs_base__status //
@@ -8901,7 +8732,7 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__decode_image_config(wuffs_gif__decoder* self,
wuffs_base__image_config* a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
if (!self) {
return wuffs_base__error__bad_receiver;
}
@@ -8910,6 +8741,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 1)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -9014,7 +8849,7 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__ack_metadata_chunk(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
if (!self) {
return wuffs_base__error__bad_receiver;
}
@@ -9023,6 +8858,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 2)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -9034,16 +8873,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_ack_metadata_chunk[0];
@@ -9056,15 +8891,13 @@
status = wuffs_base__error__bad_call_sequence;
goto exit;
}
- if ((a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src - a_src.private_impl.buf->data.ptr)))
- : 0) != self->private_impl.f_metadata_io_position) {
+ if ((a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos, ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0) != self->private_impl.f_metadata_io_position) {
status = wuffs_base__error__bad_i_o_position;
goto exit;
}
- while (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ while (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
status = wuffs_base__suspension__short_read;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(1);
}
@@ -9073,12 +8906,10 @@
(((uint64_t)(wuffs_base__load_u8be(iop_a_src))) + 1);
if (self->private_impl.f_metadata_chunk_length_value > 1) {
self->private_impl.f_metadata_io_position = wuffs_base__u64__sat_add(
- (a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src -
- a_src.private_impl.buf->data.ptr)))
- : 0),
+ (a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos,
+ ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0),
self->private_impl.f_metadata_chunk_length_value);
status = wuffs_base__warning__metadata_reported;
goto ok;
@@ -9089,12 +8920,10 @@
if (self->private_impl.f_metadata_chunk_length_value > 0) {
(iop_a_src += 1, wuffs_base__make_empty_struct());
self->private_impl.f_metadata_io_position = wuffs_base__u64__sat_add(
- (a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src -
- a_src.private_impl.buf->data.ptr)))
- : 0),
+ (a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos,
+ ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0),
self->private_impl.f_metadata_chunk_length_value);
status = wuffs_base__warning__metadata_reported;
goto ok;
@@ -9121,9 +8950,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
if (wuffs_base__status__is_error(status)) {
@@ -9279,7 +9107,7 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__decode_frame_config(wuffs_gif__decoder* self,
wuffs_base__frame_config* a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
if (!self) {
return wuffs_base__error__bad_receiver;
}
@@ -9288,6 +9116,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 3)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -9303,16 +9135,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_frame_config[0];
@@ -9329,44 +9157,38 @@
wuffs_base__make_empty_struct());
if (!self->private_impl.f_end_of_data) {
if (self->private_impl.f_call_sequence == 0) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
status = wuffs_gif__decoder__decode_image_config(self, NULL, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
}
} else if (self->private_impl.f_call_sequence != 3) {
if (self->private_impl.f_call_sequence == 4) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
status = wuffs_gif__decoder__skip_frame(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
}
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
status = wuffs_gif__decoder__decode_up_to_id_part1(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -9386,7 +9208,7 @@
if (self->private_impl
.f_quirk_enabled_first_frame_local_palette_means_black_background &&
(self->private_impl.f_num_decoded_frame_configs_value == 0)) {
- while (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ while (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
status = wuffs_base__suspension__short_read;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(4);
}
@@ -9435,9 +9257,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
if (wuffs_base__status__is_error(status)) {
@@ -9450,7 +9271,7 @@
static wuffs_base__status //
wuffs_gif__decoder__skip_frame(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_flags = 0;
@@ -9459,16 +9280,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_skip_frame[0];
@@ -9479,7 +9296,7 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9491,10 +9308,10 @@
(((uint32_t)(3)) << (1 + (v_flags & 7)));
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
if (self->private_data.s_skip_frame[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_skip_frame[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9502,7 +9319,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9513,15 +9330,13 @@
status = wuffs_gif__error__bad_literal_width;
goto exit;
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
status = wuffs_gif__decoder__skip_blocks(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -9547,9 +9362,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -9560,7 +9374,7 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gif__decoder__decode_frame(wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts) {
if (!self) {
@@ -9571,7 +9385,7 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
- if (!a_dst) {
+ if (!a_dst || !a_src) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
return wuffs_base__error__bad_argument;
}
@@ -9656,7 +9470,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_up_to_id_part1(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_block_type = 0;
@@ -9664,16 +9478,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_up_to_id_part1[0];
@@ -9685,20 +9495,16 @@
if (!self->private_impl.f_restarted) {
if (self->private_impl.f_call_sequence != 2) {
self->private_impl.f_frame_config_io_position =
- (a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src -
- a_src.private_impl.buf->data.ptr)))
- : 0);
+ (a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos,
+ ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0);
}
} else if (self->private_impl.f_frame_config_io_position !=
- (a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src -
- a_src.private_impl.buf->data.ptr)))
- : 0)) {
+ (a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos,
+ ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0)) {
status = wuffs_base__error__bad_restart;
goto exit;
} else {
@@ -9707,7 +9513,7 @@
while (true) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9715,15 +9521,13 @@
v_block_type = t_0;
}
if (v_block_type == 33) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
status = wuffs_gif__decoder__decode_extension(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -9734,15 +9538,13 @@
wuffs_base__u64__sat_add_indirect(
&self->private_impl.f_num_decoded_frames_value, 1);
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
status = wuffs_gif__decoder__decode_id_part0(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -9776,9 +9578,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -9788,7 +9589,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_header(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_c[6] = {0};
@@ -9797,16 +9598,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_header[0];
@@ -9820,7 +9617,7 @@
while (v_i < 6) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9850,9 +9647,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -9862,7 +9658,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_lsd(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_flags = 0;
@@ -9875,16 +9671,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_lsd[0];
@@ -9902,14 +9694,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
uint32_t t_0;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_0 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_lsd[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9931,14 +9723,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
uint32_t t_1;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_1 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_lsd[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9959,7 +9751,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9968,7 +9760,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9976,7 +9768,7 @@
v_background_color_index = t_3;
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -9989,14 +9781,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
uint32_t t_4;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 3)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 3)) {
t_4 = ((uint32_t)(wuffs_base__load_u24be(iop_a_src)));
iop_a_src += 3;
} else {
self->private_data.s_decode_lsd[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(9);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10071,9 +9863,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -10083,7 +9874,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_extension(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_label = 0;
@@ -10091,16 +9882,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_extension[0];
@@ -10111,7 +9898,7 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10119,15 +9906,13 @@
v_label = t_0;
}
if (v_label == 249) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
status = wuffs_gif__decoder__decode_gc(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -10135,15 +9920,13 @@
status = NULL;
goto ok;
} else if (v_label == 255) {
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
status = wuffs_gif__decoder__decode_ae(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -10151,15 +9934,13 @@
status = NULL;
goto ok;
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
status = wuffs_gif__decoder__skip_blocks(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -10178,9 +9959,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -10190,7 +9970,7 @@
static wuffs_base__status //
wuffs_gif__decoder__skip_blocks(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_block_size = 0;
@@ -10198,16 +9978,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_skip_blocks[0];
@@ -10219,7 +9995,7 @@
while (true) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10233,10 +10009,10 @@
self->private_data.s_skip_blocks[0].scratch = ((uint32_t)(v_block_size));
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
if (self->private_data.s_skip_blocks[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_skip_blocks[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10256,9 +10032,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -10268,7 +10043,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_ae(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_c = 0;
@@ -10281,16 +10056,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_ae[0];
@@ -10307,7 +10078,7 @@
while (true) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10322,10 +10093,10 @@
self->private_data.s_decode_ae[0].scratch = ((uint32_t)(v_block_size));
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
if (self->private_data.s_decode_ae[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_ae[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10340,7 +10111,7 @@
while (v_block_size < 11) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10366,7 +10137,7 @@
if (v_is_animexts || v_is_netscape) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10378,10 +10149,10 @@
((uint32_t)(v_block_size));
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
if (self->private_data.s_decode_ae[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_ae[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10390,7 +10161,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10401,10 +10172,10 @@
self->private_data.s_decode_ae[0].scratch = 2;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
if (self->private_data.s_decode_ae[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_ae[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10414,14 +10185,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
uint32_t t_4;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_4 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_ae[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(9);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10447,7 +10218,7 @@
}
} else if (self->private_impl.f_ignore_metadata) {
} else if (v_is_iccp && self->private_impl.f_report_metadata_iccp) {
- while (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ while (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
status = wuffs_base__suspension__short_read;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(10);
}
@@ -10456,18 +10227,16 @@
(iop_a_src += 1, wuffs_base__make_empty_struct());
self->private_impl.f_metadata_fourcc_value = 1229144912;
self->private_impl.f_metadata_io_position = wuffs_base__u64__sat_add(
- (a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src -
- a_src.private_impl.buf->data.ptr)))
- : 0),
+ (a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos,
+ ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0),
self->private_impl.f_metadata_chunk_length_value);
self->private_impl.f_call_sequence = 1;
status = wuffs_base__warning__metadata_reported;
goto ok;
} else if (v_is_xmp && self->private_impl.f_report_metadata_xmp) {
- while (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ while (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
status = wuffs_base__suspension__short_read;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(11);
}
@@ -10475,12 +10244,10 @@
(((uint64_t)(wuffs_base__load_u8be(iop_a_src))) + 1);
self->private_impl.f_metadata_fourcc_value = 1481461792;
self->private_impl.f_metadata_io_position = wuffs_base__u64__sat_add(
- (a_src.private_impl.buf
- ? wuffs_base__u64__sat_add(
- a_src.private_impl.buf->meta.pos,
- ((uint64_t)(iop_a_src -
- a_src.private_impl.buf->data.ptr)))
- : 0),
+ (a_src ? wuffs_base__u64__sat_add(
+ a_src->meta.pos,
+ ((uint64_t)(iop_a_src - a_src->data.ptr)))
+ : 0),
self->private_impl.f_metadata_chunk_length_value);
self->private_impl.f_call_sequence = 1;
status = wuffs_base__warning__metadata_reported;
@@ -10489,15 +10256,13 @@
goto label_0_break;
}
label_0_break:;
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(12);
status = wuffs_gif__decoder__skip_blocks(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -10521,9 +10286,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -10533,7 +10297,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_gc(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_c = 0;
@@ -10543,16 +10307,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_gc[0];
@@ -10563,7 +10323,7 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10576,7 +10336,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10595,14 +10355,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
uint16_t t_2;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_2 = wuffs_base__load_u16le(iop_a_src);
iop_a_src += 2;
} else {
self->private_data.s_decode_gc[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10625,7 +10385,7 @@
(((uint64_t)(v_gc_duration_centiseconds)) * 7056000);
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10634,7 +10394,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10659,9 +10419,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -10671,22 +10430,18 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_id_part0(wuffs_gif__decoder* self,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_id_part0[0];
@@ -10698,14 +10453,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
uint32_t t_0;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_0 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_id_part0[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10727,14 +10482,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
uint32_t t_1;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_1 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_id_part0[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10756,14 +10511,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
uint32_t t_2;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_2 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_id_part0[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10786,14 +10541,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
uint32_t t_3;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_3 = ((uint32_t)(wuffs_base__load_u16le(iop_a_src)));
iop_a_src += 2;
} else {
self->private_data.s_decode_id_part0[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10836,9 +10591,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -10849,7 +10603,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_id_part1(wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src) {
+ wuffs_base__io_buffer* a_src) {
wuffs_base__status status = NULL;
uint8_t v_flags = 0;
@@ -10864,16 +10618,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_id_part1[0];
@@ -10888,7 +10638,7 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -10908,14 +10658,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
uint32_t t_1;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 3)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 3)) {
t_1 = ((uint32_t)(wuffs_base__load_u24be(iop_a_src)));
iop_a_src += 3;
} else {
self->private_data.s_decode_id_part1[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11006,7 +10756,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11038,9 +10788,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -11051,7 +10800,7 @@
static wuffs_base__status //
wuffs_gif__decoder__decode_id_part2(wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
wuffs_base__status status = NULL;
@@ -11059,11 +10808,13 @@
bool v_need_block_size = false;
uint64_t v_n_compressed = 0;
wuffs_base__slice_u8 v_compressed = {0};
- wuffs_base__io_reader v_r = wuffs_base__null_io_reader();
- wuffs_base__io_buffer u_r WUFFS_BASE__POTENTIALLY_UNUSED =
- wuffs_base__null_io_buffer();
+ wuffs_base__io_buffer u_r = wuffs_base__null_io_buffer();
+ wuffs_base__io_buffer* v_r = &u_r;
uint8_t* iop_v_r WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ uint8_t* io0_v_r WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_v_r WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ uint8_t* io2_v_r WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ uint64_t v_mark = 0;
wuffs_base__status v_lzw_status = NULL;
wuffs_base__status v_copy_status = NULL;
wuffs_base__slice_u8 v_uncompressed = {0};
@@ -11071,16 +10822,12 @@
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_id_part2[0];
@@ -11100,7 +10847,7 @@
v_need_block_size = false;
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11111,7 +10858,7 @@
if (v_block_size == 0) {
goto label_0_break;
}
- while (((uint64_t)(io1_a_src - iop_a_src)) == 0) {
+ while (((uint64_t)(io2_a_src - iop_a_src)) == 0) {
status = wuffs_base__suspension__short_read;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(2);
}
@@ -11122,12 +10869,12 @@
}
while (self->private_impl.f_compressed_wi <= 3841) {
v_n_compressed = wuffs_base__u64__min(
- v_block_size, ((uint64_t)(io1_a_src - iop_a_src)));
+ v_block_size, ((uint64_t)(io2_a_src - iop_a_src)));
if (v_n_compressed <= 0) {
goto label_1_break;
}
v_compressed =
- wuffs_base__io_reader__take(&iop_a_src, io1_a_src, v_n_compressed);
+ wuffs_base__io_reader__take(&iop_a_src, io2_a_src, v_n_compressed);
wuffs_base__slice_u8__copy_from_slice(
wuffs_base__slice_u8__subslice_i(
wuffs_base__make_slice_u8(self->private_data.f_compressed,
@@ -11140,7 +10887,7 @@
if (v_block_size > 0) {
goto label_1_break;
}
- if (((uint64_t)(io1_a_src - iop_a_src)) <= 0) {
+ if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
v_need_block_size = true;
goto label_1_break;
}
@@ -11161,16 +10908,19 @@
goto exit;
}
{
- wuffs_base__io_reader o_0_v_r = v_r;
+ wuffs_base__io_buffer* o_0_v_r = v_r;
uint8_t* o_0_iop_v_r = iop_v_r;
+ uint8_t* o_0_io0_v_r = io0_v_r;
uint8_t* o_0_io1_v_r = io1_v_r;
- wuffs_base__io_reader__set(
- &v_r, &u_r, &iop_v_r, &io1_v_r,
+ uint8_t* o_0_io2_v_r = io2_v_r;
+ v_r = wuffs_base__io_reader__set(
+ &u_r, &iop_v_r, &io0_v_r, &io1_v_r, &io2_v_r,
wuffs_base__slice_u8__subslice_ij(
wuffs_base__make_slice_u8(self->private_data.f_compressed,
4096),
self->private_impl.f_compressed_ri,
self->private_impl.f_compressed_wi));
+ v_mark = ((uint64_t)(iop_v_r - io0_v_r));
{
u_r.meta.ri = ((size_t)(iop_v_r - u_r.data.ptr));
wuffs_base__status t_1 = wuffs_lzw__decoder__decode_io_writer(
@@ -11182,10 +10932,13 @@
}
wuffs_base__u64__sat_add_indirect(
&self->private_impl.f_compressed_ri,
- ((uint64_t)(iop_v_r - v_r.private_impl.mark)));
+ wuffs_base__io__count_since(v_mark,
+ ((uint64_t)(iop_v_r - io0_v_r))));
v_r = o_0_v_r;
iop_v_r = o_0_iop_v_r;
+ io0_v_r = o_0_io0_v_r;
io1_v_r = o_0_io1_v_r;
+ io2_v_r = o_0_io2_v_r;
}
v_uncompressed = wuffs_lzw__decoder__flush(&self->private_data.f_lzw);
if (((uint64_t)(v_uncompressed.len)) > 0) {
@@ -11203,23 +10956,21 @@
((uint32_t)(v_block_size));
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
if (self->private_data.s_decode_id_part2[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_id_part2[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
iop_a_src += self->private_data.s_decode_id_part2[0].scratch;
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
status = wuffs_gif__decoder__skip_blocks(self, a_src);
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
if (status) {
goto suspend;
@@ -11269,9 +11020,8 @@
goto exit;
exit:
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
return status;
@@ -11525,8 +11275,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_gzip__decoder__decode_io_writer(wuffs_gzip__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__error__bad_receiver;
@@ -11536,6 +11286,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_dst || !a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 1)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -11547,6 +11301,7 @@
uint8_t v_c = 0;
uint8_t v_flags = 0;
uint16_t v_xlen = 0;
+ uint64_t v_mark = 0;
uint32_t v_checksum_got = 0;
uint32_t v_decoded_length_got = 0;
wuffs_base__status v_status = NULL;
@@ -11556,33 +11311,25 @@
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
@@ -11598,7 +11345,7 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11611,7 +11358,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11624,7 +11371,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11637,7 +11384,7 @@
}
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11647,10 +11394,10 @@
self->private_data.s_decode_io_writer[0].scratch = 6;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
if (self->private_data.s_decode_io_writer[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_io_writer[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11659,14 +11406,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
uint16_t t_4;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_4 = wuffs_base__load_u16le(iop_a_src);
iop_a_src += 2;
} else {
self->private_data.s_decode_io_writer[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11689,10 +11436,10 @@
self->private_data.s_decode_io_writer[0].scratch = ((uint32_t)(v_xlen));
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
if (self->private_data.s_decode_io_writer[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_io_writer[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11702,7 +11449,7 @@
while (true) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(9);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11719,7 +11466,7 @@
while (true) {
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(10);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11736,10 +11483,10 @@
self->private_data.s_decode_io_writer[0].scratch = 2;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(11);
if (self->private_data.s_decode_io_writer[0].scratch >
- ((uint64_t)(io1_a_src - iop_a_src))) {
+ ((uint64_t)(io2_a_src - iop_a_src))) {
self->private_data.s_decode_io_writer[0].scratch -=
- ((uint64_t)(io1_a_src - iop_a_src));
- iop_a_src = io1_a_src;
+ ((uint64_t)(io2_a_src - iop_a_src));
+ iop_a_src = io2_a_src;
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11750,36 +11497,33 @@
goto exit;
}
while (true) {
- wuffs_base__io_writer__set_mark(&a_dst, iop_a_dst);
+ v_mark = ((uint64_t)(iop_a_dst - io0_a_dst));
{
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
wuffs_base__status t_7 = wuffs_deflate__decoder__decode_io_writer(
&self->private_data.f_flate, a_dst, a_src, a_workbuf);
- if (a_dst.private_impl.buf) {
- iop_a_dst = a_dst.private_impl.buf->data.ptr +
- a_dst.private_impl.buf->meta.wi;
+ if (a_dst) {
+ iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
}
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
v_status = t_7;
}
if (!self->private_impl.f_ignore_checksum) {
v_checksum_got = wuffs_crc32__ieee_hasher__update(
&self->private_data.f_checksum,
- wuffs_base__make_slice_u8(
- a_dst.private_impl.mark,
- (size_t)(iop_a_dst - a_dst.private_impl.mark)));
- v_decoded_length_got += ((uint32_t)(
- (((uint64_t)(iop_a_dst - a_dst.private_impl.mark)) & 4294967295)));
+ wuffs_base__io__since(v_mark, ((uint64_t)(iop_a_dst - io0_a_dst)),
+ io0_a_dst));
+ v_decoded_length_got +=
+ ((uint32_t)((wuffs_base__io__count_since(
+ v_mark, ((uint64_t)(iop_a_dst - io0_a_dst))) &
+ 4294967295)));
}
if (wuffs_base__status__is_ok(v_status)) {
goto label_2_break;
@@ -11791,14 +11535,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(13);
uint32_t t_8;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 4)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 4)) {
t_8 = wuffs_base__load_u32le(iop_a_src);
iop_a_src += 4;
} else {
self->private_data.s_decode_io_writer[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(14);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11820,14 +11564,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(15);
uint32_t t_9;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 4)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 4)) {
t_9 = wuffs_base__load_u32le(iop_a_src);
iop_a_src += 4;
} else {
self->private_data.s_decode_io_writer[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(16);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -11873,13 +11617,11 @@
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
if (wuffs_base__status__is_error(status)) {
@@ -12014,8 +11756,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_zlib__decoder__decode_io_writer(wuffs_zlib__decoder* self,
- wuffs_base__io_writer a_dst,
- wuffs_base__io_reader a_src,
+ wuffs_base__io_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__error__bad_receiver;
@@ -12025,6 +11767,10 @@
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called;
}
+ if (!a_dst || !a_src) {
+ self->private_impl.magic = WUFFS_BASE__DISABLED;
+ return wuffs_base__error__bad_argument;
+ }
if ((self->private_impl.active_coroutine != 0) &&
(self->private_impl.active_coroutine != 1)) {
self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -12037,37 +11783,30 @@
uint32_t v_checksum_got = 0;
wuffs_base__status v_status = NULL;
uint32_t v_checksum_want = 0;
+ uint64_t v_mark = 0;
uint8_t* iop_a_dst = NULL;
uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_dst.private_impl.buf) {
- iop_a_dst =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->meta.wi;
- if (!a_dst.private_impl.mark) {
- a_dst.private_impl.mark = iop_a_dst;
- a_dst.private_impl.limit =
- a_dst.private_impl.buf->data.ptr + a_dst.private_impl.buf->data.len;
+ uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_dst) {
+ io0_a_dst = a_dst->data.ptr;
+ io1_a_dst = io0_a_dst + a_dst->meta.wi;
+ iop_a_dst = io1_a_dst;
+ io2_a_dst = io0_a_dst + a_dst->data.len;
+ if (a_dst->meta.closed) {
+ io2_a_dst = iop_a_dst;
}
- if (a_dst.private_impl.buf->meta.closed) {
- a_dst.private_impl.limit = iop_a_dst;
- }
- io0_a_dst = a_dst.private_impl.mark;
- io1_a_dst = a_dst.private_impl.limit;
}
uint8_t* iop_a_src = NULL;
uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src.private_impl.buf) {
- iop_a_src =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.ri;
- if (!a_src.private_impl.mark) {
- a_src.private_impl.mark = iop_a_src;
- a_src.private_impl.limit =
- a_src.private_impl.buf->data.ptr + a_src.private_impl.buf->meta.wi;
- }
- io0_a_src = a_src.private_impl.mark;
- io1_a_src = a_src.private_impl.limit;
+ uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
+ if (a_src) {
+ io0_a_src = a_src->data.ptr;
+ io1_a_src = io0_a_src + a_src->meta.ri;
+ iop_a_src = io1_a_src;
+ io2_a_src = io0_a_src + a_src->meta.wi;
}
uint32_t coro_susp_point = self->private_impl.p_decode_io_writer[0];
@@ -12080,14 +11819,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
uint16_t t_0;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 2)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 2)) {
t_0 = wuffs_base__load_u16be(iop_a_src);
iop_a_src += 2;
} else {
self->private_data.s_decode_io_writer[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -12123,34 +11862,29 @@
goto exit;
}
while (true) {
- wuffs_base__io_writer__set_mark(&a_dst, iop_a_dst);
+ v_mark = ((uint64_t)(iop_a_dst - io0_a_dst));
{
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
wuffs_base__status t_1 = wuffs_deflate__decoder__decode_io_writer(
&self->private_data.f_flate, a_dst, a_src, a_workbuf);
- if (a_dst.private_impl.buf) {
- iop_a_dst = a_dst.private_impl.buf->data.ptr +
- a_dst.private_impl.buf->meta.wi;
+ if (a_dst) {
+ iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
}
- if (a_src.private_impl.buf) {
- iop_a_src = a_src.private_impl.buf->data.ptr +
- a_src.private_impl.buf->meta.ri;
+ if (a_src) {
+ iop_a_src = a_src->data.ptr + a_src->meta.ri;
}
v_status = t_1;
}
if (!self->private_impl.f_ignore_checksum) {
v_checksum_got = wuffs_adler32__hasher__update(
&self->private_data.f_checksum,
- wuffs_base__make_slice_u8(
- a_dst.private_impl.mark,
- (size_t)(iop_a_dst - a_dst.private_impl.mark)));
+ wuffs_base__io__since(v_mark, ((uint64_t)(iop_a_dst - io0_a_dst)),
+ io0_a_dst));
}
if (wuffs_base__status__is_ok(v_status)) {
goto label_0_break;
@@ -12162,14 +11896,14 @@
{
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
uint32_t t_2;
- if (WUFFS_BASE__LIKELY(io1_a_src - iop_a_src >= 4)) {
+ if (WUFFS_BASE__LIKELY(io2_a_src - iop_a_src >= 4)) {
t_2 = wuffs_base__load_u32be(iop_a_src);
iop_a_src += 4;
} else {
self->private_data.s_decode_io_writer[0].scratch = 0;
WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
while (true) {
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io1_a_src)) {
+ if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
status = wuffs_base__suspension__short_read;
goto suspend;
}
@@ -12210,13 +11944,11 @@
goto exit;
exit:
- if (a_dst.private_impl.buf) {
- a_dst.private_impl.buf->meta.wi =
- ((size_t)(iop_a_dst - a_dst.private_impl.buf->data.ptr));
+ if (a_dst) {
+ a_dst->meta.wi = ((size_t)(iop_a_dst - a_dst->data.ptr));
}
- if (a_src.private_impl.buf) {
- a_src.private_impl.buf->meta.ri =
- ((size_t)(iop_a_src - a_src.private_impl.buf->data.ptr));
+ if (a_src) {
+ a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
}
if (wuffs_base__status__is_error(status)) {