void o_document_deserialize_internal(struct o_document * doc, struct o_input_stream * stream, int embeddd) { struct o_string_buffer * buff = o_string_buffer_new(); int isfirst = 1; int readed; do { readed = o_input_stream_read(stream); if (isfirst && readed == '@') { char * str = o_string_buffer_str(buff); doc->class_name = str; o_string_buffer_clear(buff); } else if (readed == ':') { isfirst = 0; char * str = o_string_buffer_str(buff); struct o_document_value * val = o_document_value_deserialize(stream); o_document_field_set(doc, str, val); o_free(str); o_string_buffer_clear(buff); } else if (readed != -1) { o_string_buffer_append_char(buff, readed); } } while (readed != -1 && readed != ')'); o_string_buffer_free(buff); }
void test_o_input_simple_read() { unsigned char bytes[] = { 1, 2, 3, -1, -1 }; struct o_input_stream * inp = o_input_stream_new_bytes(bytes, 5); assert_true(o_input_stream_read(inp) == 1, "Error reading first byte"); assert_true(o_input_stream_read(inp) == 2, "Error reading second byte"); assert_true(o_input_stream_read(inp) == 3, "Error reading third byte"); assert_true(o_input_stream_read(inp) == (int) (unsigned char) -1, "Error reading forty byte"); assert_true(o_input_stream_read(inp) != -1, "Error reading -1 char content"); assert_true(o_input_stream_read(inp) == -1, "Error reading end byte"); o_input_stream_free(inp); }