void mpack_read_utf8(mpack_reader_t* reader, char* p, size_t byte_count) { mpack_assert(p != NULL, "destination for read of %i bytes is NULL", (int)byte_count); mpack_reader_track_str_bytes_all(reader, byte_count); mpack_read_native(reader, p, byte_count); if (mpack_reader_error(reader) == mpack_ok && !mpack_utf8_check(p, byte_count)) mpack_reader_flag_error(reader, mpack_error_type); }
void mpack_write_utf8(mpack_writer_t* writer, const char* str, uint32_t length) { mpack_assert(str != NULL, "data for string of length %i is NULL", (int)length); if (!mpack_utf8_check(str, length)) { mpack_writer_flag_error(writer, mpack_error_invalid); return; } mpack_write_str(writer, str, length); }
size_t mpack_expect_utf8(mpack_reader_t* reader, char* buf, size_t size) { size_t length = mpack_expect_str_buf(reader, buf, size); if (!mpack_utf8_check(buf, length)) { mpack_reader_flag_error(reader, mpack_error_type); return 0; } return length; }
const char* mpack_read_utf8_inplace(mpack_reader_t* reader, size_t count) { mpack_reader_track_str_bytes_all(reader, count); const char* str = mpack_read_bytes_inplace_notrack(reader, count); if (mpack_reader_error(reader) == mpack_ok && !mpack_utf8_check(str, count)) { mpack_reader_flag_error(reader, mpack_error_type); return NULL; } return str; }
char* mpack_expect_utf8_alloc(mpack_reader_t* reader, size_t maxsize, size_t* size) { char* str = mpack_expect_str_alloc(reader, maxsize, size); if (str && !mpack_utf8_check(str, *size)) { *size = 0; MPACK_FREE(str); mpack_reader_flag_error(reader, mpack_error_type); return NULL; } return str; }