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 //