static void dl_load_txt_build_default_data( dl_ctx_t ctx, dl_txt_read_ctx* read_state, unsigned int member_index ) { if( ctx->member_descs[member_index].default_value_offset == 0xFFFFFFFF ) return; // TODO: check that this is not outside the buffers dl_type_desc* def_type = dl_alloc_type( ctx, dl_internal_hash_string( "a_type_here" ) ); dl_member_desc* def_member = dl_alloc_member( ctx ); dl_member_desc* member = &ctx->member_descs[member_index]; uint32_t def_start = member->default_value_offset; uint32_t def_len = member->default_value_size; char def_buffer[2048]; // TODO: no hardcode =/ // TODO: check that typename do not exist in the ctx! size_t name_start = ctx->typedata_strings_size; dl_txt_read_substr temp = { "a_type_here", 11 }; def_type->name = dl_alloc_string( ctx, &temp ); def_type->size[DL_PTR_SIZE_HOST] = member->size[DL_PTR_SIZE_HOST]; def_type->alignment[DL_PTR_SIZE_HOST] = member->alignment[DL_PTR_SIZE_HOST]; def_type->member_count = 1; memcpy( def_member, member, sizeof( dl_member_desc ) ); def_member->offset[0] = 0; def_member->offset[1] = 0; dl_internal_str_format( def_buffer, sizeof(def_buffer), "{\"a_type_here\":{\"%s\":%.*s}}", dl_internal_member_name( ctx, member ), (int)def_len, read_state->start + def_start ); size_t prod_bytes; dl_error_t err; err = dl_txt_pack( ctx, def_buffer, 0x0, 0, &prod_bytes ); if( err != DL_ERROR_OK ) dl_txt_read_failed( ctx, read_state, DL_ERROR_INVALID_DEFAULT_VALUE, "failed to pack default-value for member \"%s\" with error \"%s\"", dl_internal_member_name( ctx, member ), dl_error_to_string( err ) ); uint8_t* pack_buffer = (uint8_t*)dl_alloc( &ctx->alloc, prod_bytes ); dl_txt_pack( ctx, def_buffer, pack_buffer, prod_bytes, 0x0 ); // TODO: convert packed instance to typelib endian/ptrsize here! size_t inst_size = prod_bytes - sizeof( dl_data_header ); ctx->default_data = (uint8_t*)dl_realloc( &ctx->alloc, ctx->default_data, ctx->default_data_size + inst_size, ctx->default_data_size ); memcpy( ctx->default_data + ctx->default_data_size, pack_buffer + sizeof( dl_data_header ), inst_size ); dl_free( &ctx->alloc, pack_buffer ); member->default_value_offset = (uint32_t)ctx->default_data_size; member->default_value_size = (uint32_t)inst_size; ctx->default_data_size += inst_size; --ctx->type_count; --ctx->member_count; ctx->typedata_strings_size = name_start; }
TEST_F(DLError, all_errors_defined_in_error_to_string) { for(dl_error_t Err = DL_ERROR_OK; Err < DL_ERROR_INTERNAL_ERROR; Err = (dl_error_t)((unsigned int)Err + 1)) EXPECT_STRNE("Unknown error!", dl_error_to_string(Err)); }