@@ -511,6 +511,42 @@ parser_error_t read_array(parser_context_t *ctx, schema_array_t *schema_array) {
511511 return parser_ok ;
512512}
513513
514+ parser_error_t read_root_type_indices (parser_context_t * ctx , root_type_indices_t * root_type_indices ) {
515+ CHECK_INPUT (root_type_indices );
516+ CHECK_INPUT (ctx );
517+
518+ // read length
519+ CHECK_ERROR (read_u32 (ctx , & root_type_indices -> qty ));
520+ print_u32 ("root_type_indices.qty:" , root_type_indices -> qty );
521+ for (uint32_t i = 0 ; i < root_type_indices -> qty ; i ++ ) {
522+ CHECK_ERROR (read_u64 (ctx , & root_type_indices -> indices [i ]));
523+ print_u8 ("root_indice" , i );
524+ print_u64 ("root_type:" , root_type_indices -> indices [i ]);
525+ }
526+
527+ return parser_ok ;
528+ }
529+
530+ parser_error_t read_chain_data (parser_context_t * ctx , chain_data_t * chain_data ) {
531+ CHECK_INPUT (chain_data );
532+ CHECK_INPUT (ctx );
533+
534+ // read chain_id
535+ CHECK_ERROR (read_u64 (ctx , & chain_data -> chain_id ));
536+ print_u64 ("chain_data.chain_id:" , chain_data -> chain_id );
537+
538+ // read chain_name
539+ CHECK_ERROR (read_u32 (ctx , (uint32_t * )& chain_data -> chain_name .len ));
540+ if (chain_data -> chain_name .len > 0 ) {
541+ chain_data -> chain_name .ptr = ctx -> buffer .ptr + ctx -> offset ;
542+ CTX_CHECK_AND_ADVANCE (ctx , chain_data -> chain_name .len );
543+ }
544+ print_buffer (& chain_data -> chain_name , "chain_name" );
545+ print_buffer_str (& chain_data -> chain_name , "chain_name_str" );
546+
547+ return parser_ok ;
548+ }
549+
514550parser_error_t metadata_read (parser_context_t * ctx , parser_tx_t * txObj ) {
515551 CHECK_INPUT (ctx );
516552 CHECK_INPUT (txObj );
@@ -524,35 +560,43 @@ parser_error_t metadata_read(parser_context_t *ctx, parser_tx_t *txObj) {
524560 for (uint32_t i = 0 ; i < txObj -> schema .types .qty ; i ++ ) {
525561 // read type
526562 CHECK_ERROR (read_u8 (ctx , (uint8_t * )& txObj -> schema .types .schemes [i ].type ));
563+ uint16_t offset_mem = ctx -> offset ;
564+ const uint8_t * ptr_mem = ctx -> buffer .ptr + ctx -> offset ;
527565 switch (txObj -> schema .types .schemes [i ].type ) {
528566 case LINKING_SCHEME_ENUM :
529567 print_string ("READING ENUM" );
530- CHECK_ERROR (read_enum (ctx , & txObj -> schema .types .schemes [i ].enum_type ));
568+ schema_enum_t enum_type = {0 };
569+ CHECK_ERROR (read_enum (ctx , & enum_type ));
531570 print_string ("READING ENUM DONE\n" );
532571 break ;
533572 case LINKING_SCHEME_STRUCT :
534573 print_string ("READING STRUCT" );
535- CHECK_ERROR (read_struct (ctx , & txObj -> schema .types .schemes [i ].struct_type ));
574+ schema_struct_t struct_type = {0 };
575+ CHECK_ERROR (read_struct (ctx , & struct_type ));
536576 print_string ("READING STRUCT DONE\n" );
537577 break ;
538578 case LINKING_SCHEME_TUPLE :
539579 print_string ("READING TUPLE" );
540- CHECK_ERROR (read_tuple (ctx , & txObj -> schema .types .schemes [i ].tuple_type ));
580+ schema_tuple_t tuple_type = {0 };
581+ CHECK_ERROR (read_tuple (ctx , & tuple_type ));
541582 print_string ("READING TUPLE DONE\n" );
542583 break ;
543584 case LINKING_SCHEME_OPTION :
544585 print_string ("READING OPTION" );
545- CHECK_ERROR (read_link (ctx , & txObj -> schema .types .schemes [i ].option_type ));
586+ link_t option_type = {0 };
587+ CHECK_ERROR (read_link (ctx , & option_type ));
546588 print_string ("READING OPTION DONE\n" );
547589 break ;
548590 case LINKING_SCHEME_INTEGER :
549591 print_string ("READING INTEGER" );
550- CHECK_ERROR (read_primitive_integer (ctx , & txObj -> schema .types .schemes [i ].integer_type ));
592+ primitive_integer_t integer_type = {0 };
593+ CHECK_ERROR (read_primitive_integer (ctx , & integer_type ));
551594 print_string ("READING INTEGER DONE\n" );
552595 break ;
553596 case LINKING_SCHEME_BYTE_ARRAY :
554597 print_string ("READING BYTE ARRAY" );
555- CHECK_ERROR (read_primitive_byte_array (ctx , & txObj -> schema .types .schemes [i ].byte_array_type ));
598+ primitive_byte_array_t byte_array_type = {0 };
599+ CHECK_ERROR (read_primitive_byte_array (ctx , & byte_array_type ));
556600 print_string ("READING BYTE ARRAY DONE\n" );
557601 break ;
558602 case LINKING_SCHEME_FLOAT32 :
@@ -569,55 +613,50 @@ parser_error_t metadata_read(parser_context_t *ctx, parser_tx_t *txObj) {
569613 break ;
570614 case LINKING_SCHEME_SKIP :
571615 print_string ("READING SKIP" );
572- CHECK_ERROR (read_u64 (ctx , (uint64_t * )& txObj -> schema .types .schemes [i ].skip_type ));
573- print_u64 ("skip_type:" , txObj -> schema .types .schemes [i ].skip_type );
616+ uint64_t skip_type = 0 ;
617+ CHECK_ERROR (read_u64 (ctx , & skip_type ));
618+ print_u64 ("skip_type:" , skip_type );
574619 print_string ("READING SKIP DONE\n" );
575620 break ;
576621 case LINKING_SCHEME_BYTE_VEC :
577622 print_string ("READING BYTE VEC" );
578- CHECK_ERROR (read_byte_display (ctx , & txObj -> schema .types .schemes [i ].byte_vec_type ));
623+ byte_display_t byte_vec_type = {0 };
624+ CHECK_ERROR (read_byte_display (ctx , & byte_vec_type ));
579625 print_string ("READING BYTE VEC DONE\n" );
580626 break ;
581627 case LINKING_SCHEME_ARRAY :
582628 print_string ("READING ARRAY" );
583- CHECK_ERROR (read_array (ctx , & txObj -> schema .types .schemes [i ].array_type ));
629+ schema_array_t array_type = {0 };
630+ CHECK_ERROR (read_array (ctx , & array_type ));
584631 print_string ("READING ARRAY DONE\n" );
585632 break ;
586633 case LINKING_SCHEME_VEC :
587634 print_string ("READING VEC" );
588- CHECK_ERROR (read_link (ctx , & txObj -> schema .types .schemes [i ].vec_type ));
635+ link_t vec_type = {0 };
636+ CHECK_ERROR (read_link (ctx , & vec_type ));
589637 print_string ("READING VEC DONE\n" );
590638 break ;
591639 case LINKING_SCHEME_MAP :
592640 print_string ("READING MAP" );
593- CHECK_ERROR (read_link (ctx , & txObj -> schema .types .schemes [i ].map_type .key ));
594- CHECK_ERROR (read_link (ctx , & txObj -> schema .types .schemes [i ].map_type .value ));
641+ link_t key = {0 };
642+ link_t value = {0 };
643+ CHECK_ERROR (read_link (ctx , & key ));
644+ CHECK_ERROR (read_link (ctx , & value ));
595645 print_string ("READING MAP DONE\n" );
596646 break ;
597647 default :
598648 print_u8 ("UNKNOWN TYPE:" , txObj -> schema .types .schemes [i ].type );
599649 return parser_no_data ;
600650 }
651+ txObj -> schema .types .schemes [i ].data .buffer .ptr = ptr_mem ;
652+ txObj -> schema .types .schemes [i ].data .buffer .len = ctx -> offset - offset_mem ;
601653 }
602654
603655 // read root_type_indices
604- CHECK_ERROR (read_u32 (ctx , & txObj -> schema .root_type_indices .qty ));
605- print_u32 ("root_type_indices.qty:" , txObj -> schema .root_type_indices .qty );
606- for (uint32_t i = 0 ; i < txObj -> schema .root_type_indices .qty ; i ++ ) {
607- CHECK_ERROR (read_u64 (ctx , & txObj -> schema .root_type_indices .indices [i ]));
608- print_u64 ("root_type_indices[%d]:" , txObj -> schema .root_type_indices .indices [i ]);
609- }
656+ CHECK_ERROR (read_root_type_indices (ctx , & txObj -> schema .root_type_indices ));
610657
611658 // read chain_data
612- CHECK_ERROR (read_u64 (ctx , & txObj -> schema .chain_data .chain_id ));
613- print_u64 ("chain_data.chain_id:" , txObj -> schema .chain_data .chain_id );
614- CHECK_ERROR (read_u32 (ctx , (uint32_t * )& txObj -> schema .chain_data .chain_name .len ));
615- if (txObj -> schema .chain_data .chain_name .len > 0 ) {
616- txObj -> schema .chain_data .chain_name .ptr = ctx -> buffer .ptr + ctx -> offset ;
617- CTX_CHECK_AND_ADVANCE (ctx , txObj -> schema .chain_data .chain_name .len );
618- print_buffer (& txObj -> schema .chain_data .chain_name , "chain_name" );
619- print_buffer_str (& txObj -> schema .chain_data .chain_name , "chain_name_str" );
620- }
659+ CHECK_ERROR (read_chain_data (ctx , & txObj -> schema .chain_data ));
621660
622661 // read extra_metadata_hash
623662 txObj -> schema .extra_metadata_hash .len = 32 ;
0 commit comments