diff --git a/src/msf/msf_parse.c b/src/msf/msf_parse.c index 1dfd6c0c..f3f3a208 100644 --- a/src/msf/msf_parse.c +++ b/src/msf/msf_parse.c @@ -232,9 +232,9 @@ msf_raw_stream_table_from_data(Arena *arena, String8 msf_data) } internal String8 -msf_data_from_stream_index(Arena *arena, String8 msf_data, MSF_RawStreamTable *st, U64 stream_idx) +msf_data_from_stream_number(Arena *arena, String8 msf_data, MSF_RawStreamTable *st, MSF_StreamNumber sn) { - MSF_RawStream stream = st->streams[stream_idx]; + MSF_RawStream stream = st->streams[sn]; U8 *stream_buf = push_array_no_zero(arena, U8, stream.size); U8 *stream_out_ptr = stream_buf; @@ -277,17 +277,21 @@ msf_parsed_from_data(Arena *arena, String8 msf_data) { Temp scratch = scratch_begin(&arena, 1); - MSF_RawStreamTable *st = msf_raw_stream_table_from_data(scratch.arena, msf_data); - String8 *streams = push_array_no_zero(arena, String8, st->stream_count); - for (U64 stream_idx = 0; stream_idx < st->stream_count; ++stream_idx) { - streams[stream_idx] = msf_data_from_stream_index(arena, msf_data, st, stream_idx); - } + MSF_Parsed *result = 0; - MSF_Parsed *result = push_array_no_zero(arena, MSF_Parsed, 1); - result->streams = streams; - result->stream_count = st->stream_count; - result->block_size = st->page_size; - result->block_count = st->total_page_count; + MSF_RawStreamTable *st = msf_raw_stream_table_from_data(scratch.arena, msf_data); + if (st) { + String8 *streams = push_array_no_zero(arena, String8, st->stream_count); + for (MSF_StreamNumber sn = 0; sn < st->stream_count; ++sn) { + streams[sn] = msf_data_from_stream_number(arena, msf_data, st, sn); + } + + result = push_array_no_zero(arena, MSF_Parsed, 1); + result->streams = streams; + result->stream_count = st->stream_count; + result->block_size = st->page_size; + result->block_count = st->total_page_count; + } scratch_end(scratch); return result; diff --git a/src/msf/msf_parse.h b/src/msf/msf_parse.h index 2eac0380..126687aa 100644 --- a/src/msf/msf_parse.h +++ b/src/msf/msf_parse.h @@ -37,13 +37,11 @@ struct MSF_Parsed U64 block_count; }; -#define MSF_MAX_MAGIC_SIZE Min(sizeof(msf_msf20_magic), sizeof(msf_msf70_magic)) - //////////////////////////////// //~ rjf: MSF Parser Functions internal MSF_RawStreamTable* msf_raw_stream_table_from_data(Arena *arena, String8 msf_data); -internal String8 msf_data_from_stream_index(Arena *arena, String8 msf_data, MSF_RawStreamTable *st, U64 stream_idx); +internal String8 msf_data_from_stream_number(Arena *arena, String8 msf_data, MSF_RawStreamTable *st, MSF_StreamNumber sn); internal MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data); internal String8 msf_data_from_stream(MSF_Parsed *msf, MSF_StreamNumber sn); diff --git a/src/rdi_from_pdb/rdi_from_pdb.c b/src/rdi_from_pdb/rdi_from_pdb.c index 9ff826cd..0c31249d 100644 --- a/src/rdi_from_pdb/rdi_from_pdb.c +++ b/src/rdi_from_pdb/rdi_from_pdb.c @@ -5023,15 +5023,15 @@ p2r_has_symbol_ref(String8 msf_data, String8List symbol_list, MSF_RawStreamTable B32 has_ref = 0; - String8 dbi_data = msf_data_from_stream_index(scratch.arena, msf_data, st, PDB_FixedStream_Dbi); + String8 dbi_data = msf_data_from_stream_number(scratch.arena, msf_data, st, PDB_FixedStream_Dbi); PDB_DbiParsed *dbi = pdb_dbi_from_data(scratch.arena, dbi_data); if(dbi) { - String8 gsi_data = msf_data_from_stream_index(scratch.arena, msf_data, st, dbi->gsi_sn); + String8 gsi_data = msf_data_from_stream_number(scratch.arena, msf_data, st, dbi->gsi_sn); PDB_GsiParsed *gsi_parsed = pdb_gsi_from_data(scratch.arena, gsi_data); if(gsi_parsed) { - String8 symbol_data = msf_data_from_stream_index(scratch.arena, msf_data, st, dbi->sym_sn); + String8 symbol_data = msf_data_from_stream_number(scratch.arena, msf_data, st, dbi->sym_sn); for(String8Node *symbol_n = symbol_list.first; symbol_n != 0; symbol_n = symbol_n->next) { @@ -5056,7 +5056,7 @@ p2r_has_file_ref(String8 msf_data, String8List file_list, MSF_RawStreamTable *st B32 has_ref = 0; - String8 info_data = msf_data_from_stream_index(scratch.arena, msf_data, st, PDB_FixedStream_Info); + String8 info_data = msf_data_from_stream_number(scratch.arena, msf_data, st, PDB_FixedStream_Info); PDB_Info *info = pdb_info_from_data(scratch.arena, info_data); if(info) { @@ -5064,7 +5064,7 @@ p2r_has_file_ref(String8 msf_data, String8List file_list, MSF_RawStreamTable *st if(named_streams) { MSF_StreamNumber strtbl_sn = named_streams->sn[PDB_NamedStream_StringTable]; - String8 strtbl_data = msf_data_from_stream_index(scratch.arena, msf_data, st, strtbl_sn); + String8 strtbl_data = msf_data_from_stream_number(scratch.arena, msf_data, st, strtbl_sn); PDB_Strtbl *strtbl = pdb_strtbl_from_data(scratch.arena, strtbl_data); if(strtbl) {