Add wuffs_aux::private_impl::ErrorMessages type
diff --git a/internal/cgen/auxiliary/base.cc b/internal/cgen/auxiliary/base.cc
index 7de4143..a43a83e 100644
--- a/internal/cgen/auxiliary/base.cc
+++ b/internal/cgen/auxiliary/base.cc
@@ -166,23 +166,30 @@
namespace private_impl {
-const char ErrMsg_MaxInclMetadataLengthExceeded[] = //
- "wuffs_aux::private_impl: max_incl_metadata_length exceeded";
-const char ErrMsg_OutOfMemory[] = //
- "wuffs_aux::private_impl: out of memory";
-const char ErrMsg_UnexpectedEndOfFile[] = //
- "wuffs_aux::private_impl: unexpected end of file";
-const char ErrMsg_UnsupportedMetadata[] = //
- "wuffs_aux::private_impl: unsupported metadata";
-const char ErrMsg_UnsupportedNegativeAdvance[] = //
- "wuffs_aux::private_impl: unsupported negative advance";
+struct ErrorMessages {
+ const char* max_incl_metadata_length_exceeded;
+ const char* out_of_memory;
+ const char* unexpected_end_of_file;
+ const char* unsupported_metadata;
+ const char* unsupported_negative_advance;
+
+ // If adding new "const char*" typed fields to this struct, either add them
+ // after existing fields or, if re-ordering fields, make sure that you update
+ // all of the "const private_impl::ErrorMessages FooBarErrorMessages" values
+ // in all of the sibling *.cc files.
+
+ static inline const char* resolve(const char* s) {
+ return s ? s : "wuffs_aux::private_impl: unknown error";
+ };
+};
std::string //
-AdvanceIOBufferTo(sync_io::Input& input,
+AdvanceIOBufferTo(const ErrorMessages& error_messages,
+ sync_io::Input& input,
IOBuffer& io_buf,
uint64_t absolute_position) {
if (absolute_position < io_buf.reader_position()) {
- return ErrMsg_UnsupportedNegativeAdvance;
+ return error_messages.resolve(error_messages.unsupported_negative_advance);
}
while (true) {
uint64_t relative_position = absolute_position - io_buf.reader_position();
@@ -190,7 +197,7 @@
io_buf.meta.ri += (size_t)relative_position;
break;
} else if (io_buf.meta.closed) {
- return ErrMsg_UnexpectedEndOfFile;
+ return error_messages.resolve(error_messages.unexpected_end_of_file);
}
io_buf.meta.ri = io_buf.meta.wi;
if (!input.BringsItsOwnIOBuffer()) {
@@ -206,6 +213,7 @@
std::string //
HandleMetadata(
+ const ErrorMessages& error_messages,
sync_io::Input& input,
wuffs_base__io_buffer& io_buf,
sync_io::DynIOBuffer& raw,
@@ -239,23 +247,25 @@
}
uint64_t num_to_copy = r.length();
if (num_to_copy > (raw.m_max_incl - raw.m_buf.meta.wi)) {
- return ErrMsg_MaxInclMetadataLengthExceeded;
+ return error_messages.resolve(
+ error_messages.max_incl_metadata_length_exceeded);
} else if (num_to_copy > (raw.m_buf.data.len - raw.m_buf.meta.wi)) {
switch (raw.grow(num_to_copy + raw.m_buf.meta.wi)) {
case sync_io::DynIOBuffer::GrowResult::OK:
break;
case sync_io::DynIOBuffer::GrowResult::FailedMaxInclExceeded:
- return ErrMsg_MaxInclMetadataLengthExceeded;
+ return error_messages.resolve(
+ error_messages.max_incl_metadata_length_exceeded);
case sync_io::DynIOBuffer::GrowResult::FailedOutOfMemory:
- return ErrMsg_OutOfMemory;
+ return error_messages.resolve(error_messages.out_of_memory);
}
}
if (io_buf.reader_position() > r.min_incl) {
- return ErrMsg_UnsupportedMetadata;
+ return error_messages.resolve(error_messages.unsupported_metadata);
} else {
std::string error_message =
- AdvanceIOBufferTo(input, io_buf, r.min_incl);
+ AdvanceIOBufferTo(error_messages, input, io_buf, r.min_incl);
if (!error_message.empty()) {
return error_message;
}
@@ -271,7 +281,8 @@
if (num_to_copy == 0) {
break;
} else if (io_buf.meta.closed) {
- return ErrMsg_UnexpectedEndOfFile;
+ return error_messages.resolve(
+ error_messages.unexpected_end_of_file);
} else if (!input.BringsItsOwnIOBuffer()) {
io_buf.compact();
}
@@ -284,7 +295,7 @@
}
default:
- return ErrMsg_UnsupportedMetadata;
+ return error_messages.resolve(error_messages.unsupported_metadata);
}
if (status.repr == nullptr) {
@@ -297,9 +308,10 @@
case sync_io::DynIOBuffer::GrowResult::OK:
break;
case sync_io::DynIOBuffer::GrowResult::FailedMaxInclExceeded:
- return ErrMsg_MaxInclMetadataLengthExceeded;
+ return error_messages.resolve(
+ error_messages.max_incl_metadata_length_exceeded);
case sync_io::DynIOBuffer::GrowResult::FailedOutOfMemory:
- return ErrMsg_OutOfMemory;
+ return error_messages.resolve(error_messages.out_of_memory);
}
}
}
diff --git a/internal/cgen/auxiliary/image.cc b/internal/cgen/auxiliary/image.cc
index 5d75d22..8ac36ab 100644
--- a/internal/cgen/auxiliary/image.cc
+++ b/internal/cgen/auxiliary/image.cc
@@ -237,30 +237,20 @@
namespace {
-std::string //
-DecodeImageErrorMessage(std::string s) {
- if (!s.empty()) {
- if (s == private_impl::ErrMsg_MaxInclMetadataLengthExceeded) {
- return DecodeImage_MaxInclMetadataLengthExceeded;
- } else if (s == private_impl::ErrMsg_OutOfMemory) {
- return DecodeImage_OutOfMemory;
- } else if (s == private_impl::ErrMsg_UnexpectedEndOfFile) {
- return DecodeImage_UnexpectedEndOfFile;
- } else if (s == private_impl::ErrMsg_UnsupportedMetadata) {
- return DecodeImage_UnsupportedMetadata;
- } else if (s == private_impl::ErrMsg_UnsupportedNegativeAdvance) {
- return DecodeImage_UnsupportedImageFormat;
- }
- }
- return s;
-}
+const private_impl::ErrorMessages DecodeImageErrorMessages = {
+ DecodeImage_MaxInclMetadataLengthExceeded, //
+ DecodeImage_OutOfMemory, //
+ DecodeImage_UnexpectedEndOfFile, //
+ DecodeImage_UnsupportedMetadata, //
+ DecodeImage_UnsupportedImageFormat, //
+};
std::string //
DecodeImageAdvanceIOBufferTo(sync_io::Input& input,
wuffs_base__io_buffer& io_buf,
uint64_t absolute_position) {
- return DecodeImageErrorMessage(
- private_impl::AdvanceIOBufferTo(input, io_buf, absolute_position));
+ return private_impl::AdvanceIOBufferTo(DecodeImageErrorMessages, input,
+ io_buf, absolute_position);
}
wuffs_base__status //
@@ -285,10 +275,10 @@
sync_io::Input& input,
wuffs_base__io_buffer& io_buf,
sync_io::DynIOBuffer& raw_metadata_buf) {
- return DecodeImageErrorMessage(
- private_impl::HandleMetadata(input, io_buf, raw_metadata_buf, DIHM0,
- static_cast<void*>(image_decoder.get()),
- DIHM1, static_cast<void*>(&callbacks)));
+ return private_impl::HandleMetadata(DecodeImageErrorMessages, input, io_buf,
+ raw_metadata_buf, DIHM0,
+ static_cast<void*>(image_decoder.get()),
+ DIHM1, static_cast<void*>(&callbacks));
}
DecodeImageResult //
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 5a649fc..8974e21 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -42225,23 +42225,30 @@
namespace private_impl {
-const char ErrMsg_MaxInclMetadataLengthExceeded[] = //
- "wuffs_aux::private_impl: max_incl_metadata_length exceeded";
-const char ErrMsg_OutOfMemory[] = //
- "wuffs_aux::private_impl: out of memory";
-const char ErrMsg_UnexpectedEndOfFile[] = //
- "wuffs_aux::private_impl: unexpected end of file";
-const char ErrMsg_UnsupportedMetadata[] = //
- "wuffs_aux::private_impl: unsupported metadata";
-const char ErrMsg_UnsupportedNegativeAdvance[] = //
- "wuffs_aux::private_impl: unsupported negative advance";
+struct ErrorMessages {
+ const char* max_incl_metadata_length_exceeded;
+ const char* out_of_memory;
+ const char* unexpected_end_of_file;
+ const char* unsupported_metadata;
+ const char* unsupported_negative_advance;
+
+ // If adding new "const char*" typed fields to this struct, either add them
+ // after existing fields or, if re-ordering fields, make sure that you update
+ // all of the "const private_impl::ErrorMessages FooBarErrorMessages" values
+ // in all of the sibling *.cc files.
+
+ static inline const char* resolve(const char* s) {
+ return s ? s : "wuffs_aux::private_impl: unknown error";
+ };
+};
std::string //
-AdvanceIOBufferTo(sync_io::Input& input,
+AdvanceIOBufferTo(const ErrorMessages& error_messages,
+ sync_io::Input& input,
IOBuffer& io_buf,
uint64_t absolute_position) {
if (absolute_position < io_buf.reader_position()) {
- return ErrMsg_UnsupportedNegativeAdvance;
+ return error_messages.resolve(error_messages.unsupported_negative_advance);
}
while (true) {
uint64_t relative_position = absolute_position - io_buf.reader_position();
@@ -42249,7 +42256,7 @@
io_buf.meta.ri += (size_t)relative_position;
break;
} else if (io_buf.meta.closed) {
- return ErrMsg_UnexpectedEndOfFile;
+ return error_messages.resolve(error_messages.unexpected_end_of_file);
}
io_buf.meta.ri = io_buf.meta.wi;
if (!input.BringsItsOwnIOBuffer()) {
@@ -42265,6 +42272,7 @@
std::string //
HandleMetadata(
+ const ErrorMessages& error_messages,
sync_io::Input& input,
wuffs_base__io_buffer& io_buf,
sync_io::DynIOBuffer& raw,
@@ -42298,23 +42306,25 @@
}
uint64_t num_to_copy = r.length();
if (num_to_copy > (raw.m_max_incl - raw.m_buf.meta.wi)) {
- return ErrMsg_MaxInclMetadataLengthExceeded;
+ return error_messages.resolve(
+ error_messages.max_incl_metadata_length_exceeded);
} else if (num_to_copy > (raw.m_buf.data.len - raw.m_buf.meta.wi)) {
switch (raw.grow(num_to_copy + raw.m_buf.meta.wi)) {
case sync_io::DynIOBuffer::GrowResult::OK:
break;
case sync_io::DynIOBuffer::GrowResult::FailedMaxInclExceeded:
- return ErrMsg_MaxInclMetadataLengthExceeded;
+ return error_messages.resolve(
+ error_messages.max_incl_metadata_length_exceeded);
case sync_io::DynIOBuffer::GrowResult::FailedOutOfMemory:
- return ErrMsg_OutOfMemory;
+ return error_messages.resolve(error_messages.out_of_memory);
}
}
if (io_buf.reader_position() > r.min_incl) {
- return ErrMsg_UnsupportedMetadata;
+ return error_messages.resolve(error_messages.unsupported_metadata);
} else {
std::string error_message =
- AdvanceIOBufferTo(input, io_buf, r.min_incl);
+ AdvanceIOBufferTo(error_messages, input, io_buf, r.min_incl);
if (!error_message.empty()) {
return error_message;
}
@@ -42330,7 +42340,8 @@
if (num_to_copy == 0) {
break;
} else if (io_buf.meta.closed) {
- return ErrMsg_UnexpectedEndOfFile;
+ return error_messages.resolve(
+ error_messages.unexpected_end_of_file);
} else if (!input.BringsItsOwnIOBuffer()) {
io_buf.compact();
}
@@ -42343,7 +42354,7 @@
}
default:
- return ErrMsg_UnsupportedMetadata;
+ return error_messages.resolve(error_messages.unsupported_metadata);
}
if (status.repr == nullptr) {
@@ -42356,9 +42367,10 @@
case sync_io::DynIOBuffer::GrowResult::OK:
break;
case sync_io::DynIOBuffer::GrowResult::FailedMaxInclExceeded:
- return ErrMsg_MaxInclMetadataLengthExceeded;
+ return error_messages.resolve(
+ error_messages.max_incl_metadata_length_exceeded);
case sync_io::DynIOBuffer::GrowResult::FailedOutOfMemory:
- return ErrMsg_OutOfMemory;
+ return error_messages.resolve(error_messages.out_of_memory);
}
}
}
@@ -42961,30 +42973,20 @@
namespace {
-std::string //
-DecodeImageErrorMessage(std::string s) {
- if (!s.empty()) {
- if (s == private_impl::ErrMsg_MaxInclMetadataLengthExceeded) {
- return DecodeImage_MaxInclMetadataLengthExceeded;
- } else if (s == private_impl::ErrMsg_OutOfMemory) {
- return DecodeImage_OutOfMemory;
- } else if (s == private_impl::ErrMsg_UnexpectedEndOfFile) {
- return DecodeImage_UnexpectedEndOfFile;
- } else if (s == private_impl::ErrMsg_UnsupportedMetadata) {
- return DecodeImage_UnsupportedMetadata;
- } else if (s == private_impl::ErrMsg_UnsupportedNegativeAdvance) {
- return DecodeImage_UnsupportedImageFormat;
- }
- }
- return s;
-}
+const private_impl::ErrorMessages DecodeImageErrorMessages = {
+ DecodeImage_MaxInclMetadataLengthExceeded, //
+ DecodeImage_OutOfMemory, //
+ DecodeImage_UnexpectedEndOfFile, //
+ DecodeImage_UnsupportedMetadata, //
+ DecodeImage_UnsupportedImageFormat, //
+};
std::string //
DecodeImageAdvanceIOBufferTo(sync_io::Input& input,
wuffs_base__io_buffer& io_buf,
uint64_t absolute_position) {
- return DecodeImageErrorMessage(
- private_impl::AdvanceIOBufferTo(input, io_buf, absolute_position));
+ return private_impl::AdvanceIOBufferTo(DecodeImageErrorMessages, input,
+ io_buf, absolute_position);
}
wuffs_base__status //
@@ -43009,10 +43011,10 @@
sync_io::Input& input,
wuffs_base__io_buffer& io_buf,
sync_io::DynIOBuffer& raw_metadata_buf) {
- return DecodeImageErrorMessage(
- private_impl::HandleMetadata(input, io_buf, raw_metadata_buf, DIHM0,
- static_cast<void*>(image_decoder.get()),
- DIHM1, static_cast<void*>(&callbacks)));
+ return private_impl::HandleMetadata(DecodeImageErrorMessages, input, io_buf,
+ raw_metadata_buf, DIHM0,
+ static_cast<void*>(image_decoder.get()),
+ DIHM1, static_cast<void*>(&callbacks));
}
DecodeImageResult //