mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-15 13:29:41 -07:00
fixup file checksums in the MSF streams
This commit is contained in:
1 parent
6b7cd39ff1
commit
b5f0862a91
10 files changed
+360
-606
No files matched your search
@@ -830,8 +830,8 @@ msf_stream_resize_ex(MSF_Context *msf, MSF_Stream *stream, MSF_UInt size)
|
||||
}
|
||||
|
||||
// update stream
|
||||
stream->size = Min(stream->size, stream->page_list.count * msf->page_size);
|
||||
stream->pos = Min(stream->pos, stream->size);
|
||||
stream->size = size;
|
||||
stream->pos = Min(stream->pos, stream->size);
|
||||
stream->pos_page = 0;
|
||||
|
||||
return 1;
|
||||
@@ -1212,26 +1212,40 @@ msf_stream_write_string_parallel(TP_Context *tp, MSF_Context *msf, MSF_StreamNum
|
||||
}
|
||||
|
||||
internal String8List
|
||||
msf_raw_pages_from_sn(Arena *arena, MSF_Context *msf, MSF_StreamNumber sn)
|
||||
msf_data_from_sn(Arena *arena, MSF_Context *msf, MSF_StreamNumber sn)
|
||||
{
|
||||
String8List result = {0};
|
||||
|
||||
MSF_Stream *stream = msf_find_stream(msf, sn);
|
||||
String8 acc = {0};
|
||||
for EachNode(n, MSF_PageNode, stream->page_list.first) {
|
||||
String8 p = msf_data_from_pn(msf->page_data_list, msf->page_size, n->pn);
|
||||
if (acc.str + acc.size == p.str) {
|
||||
acc.size += p.size;
|
||||
|
||||
MSF_PageNode *n;
|
||||
for (n = stream->page_list.first; n != stream->page_list.last; n = n->next) {
|
||||
String8 page = msf_data_from_pn(msf->page_data_list, msf->page_size, n->pn);
|
||||
|
||||
if (acc.str + acc.size != page.str) {
|
||||
if (acc.size > 0) {
|
||||
str8_list_push(arena, &result, acc);
|
||||
}
|
||||
acc = page;
|
||||
} else {
|
||||
str8_list_push(arena, &result, acc);
|
||||
acc = p;
|
||||
acc.size += page.size;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.node_count && result.last->string.str + result.last->string.size == acc.str) {
|
||||
result.last->string.size += acc.size;
|
||||
} else {
|
||||
str8_list_push(arena, &result, acc);
|
||||
if (n) {
|
||||
String8 page = msf_data_from_pn(msf->page_data_list, msf->page_size, n->pn);
|
||||
if (acc.str + acc.size != page.str) {
|
||||
acc = page;
|
||||
} else {
|
||||
acc.size += page.size;
|
||||
}
|
||||
|
||||
acc.size = Min(stream->size - result.total_size, acc.size);
|
||||
|
||||
if (acc.size > 0) {
|
||||
str8_list_push(arena, &result, acc);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -188,7 +188,7 @@ internal B32 msf_stream_write_parallel(TP_Context *tp, MSF_Context *msf, MSF_Str
|
||||
#define msf_stream_write_array(m, s, v, c) msf_stream_write(m, s, (void*)(v), sizeof(*(v)) * (c))
|
||||
#define msf_stream_write_struct(m, s, v ) msf_stream_write_array(m, s, v, 1)
|
||||
|
||||
internal String8List msf_raw_pages_from_sn(Arena *arena, MSF_Context *msf, MSF_StreamNumber sn);
|
||||
internal String8List msf_data_from_sn(Arena *arena, MSF_Context *msf, MSF_StreamNumber sn);
|
||||
|
||||
internal MSF_UInt msf_count_pages(MSF_UInt page_size, U64 data_size);
|
||||
internal MSF_PageNumber msf_get_page_count_cap(MSF_PageDataList page_data_list, MSF_UInt page_size);
|
||||
|
||||
Reference in new issue
Block a user