static void * sml_prof_obj_period_entry_parse_(sml_buffer *buf) { sml_prof_obj_period_entry *entry = sml_prof_obj_period_entry_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 4) { buf->error = 1; goto error; } entry->val_time = sml_time_parse(buf); if (sml_buf_has_errors(buf)) goto error; entry->status = sml_u64_parse(buf); if (sml_buf_has_errors(buf)) goto error; entry->value_list = sml_sequence_parse(buf, sml_value_entry_parse_, sml_value_entry_free_); if (sml_buf_has_errors(buf)) goto error; entry->period_signature = sml_signature_parse(buf); if (sml_buf_has_errors(buf)) goto error; return entry; error: buf->error = 1; sml_prof_obj_period_entry_free(entry); return 0; }
TEST(sml_number, parse_unsigned64_fewer_bytes) { hex2binary("67000000000001", sml_buf_get_current_buf(buf)); u64 *n = sml_u64_parse(buf); TEST_ASSERT_EQUAL(1, *n); sml_u64_free( n ); }
sml_tupel_entry *sml_tupel_entry_parse(sml_buffer *buf) { if (sml_buf_optional_is_skipped(buf)) { return 0; } sml_tupel_entry *tupel = sml_tupel_entry_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 23) { buf->error = 1; goto error; } tupel->server_id = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->sec_index = sml_time_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->status = sml_u64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->unit_pA = sml_unit_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->scaler_pA = sml_i8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->value_pA = sml_i64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->unit_R1 = sml_unit_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->scaler_R1 = sml_i8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->value_R1 = sml_i64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->unit_R4 = sml_unit_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->scaler_R4 = sml_i8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->value_R4 = sml_i64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->signature_pA_R1_R4 = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->unit_mA = sml_unit_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->scaler_mA = sml_i8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->value_mA = sml_i64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->unit_R2 = sml_unit_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->scaler_R2 = sml_i8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->value_R2 = sml_i64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->unit_R3 = sml_unit_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->scaler_R3 = sml_i8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->value_R3 = sml_i64_parse(buf); if (sml_buf_has_errors(buf)) goto error; tupel->signature_mA_R2_R3 = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; return tupel; error: sml_tupel_entry_free(tupel); return 0; }