pass over rdi dumping code; relocate to rdi_format_local; eliminate redundant helpers; plug into radbin

This commit is contained in:
Ryan Fleury
2025-06-10 14:14:39 -07:00
parent 6096869004
commit 834f38f73b
12 changed files with 1467 additions and 1285 deletions
+31 -4
View File
@@ -90,13 +90,40 @@ os_write_data_list_to_file_path(String8 path, String8List list)
if(!os_handle_match(file, os_handle_zero()))
{
good = 1;
U64 off = 0;
for(String8Node *n = list.first; n != 0; n = n->next)
Temp scratch = scratch_begin(0, 0);
U64 write_buffer_size = KB(64);
U8 *write_buffer = push_array_no_zero(scratch.arena, U8, write_buffer_size);
U64 write_buffer_write_pos = 0;
U64 write_buffer_read_pos = 0;
U64 file_off = 0;
{
os_file_write(file, r1u64(off, off+n->string.size), n->string.str);
off += n->string.size;
for(String8Node *n = list.first; n != 0; n = n->next)
{
for(U64 n_off = 0; n_off < n->string.size;)
{
U64 write_buffer_unconsumed_size = (write_buffer_write_pos - write_buffer_read_pos);
U64 write_buffer_available_size = (write_buffer_size - write_buffer_unconsumed_size);
if(write_buffer_available_size == 0)
{
os_file_write(file, r1u64(file_off, file_off+write_buffer_size), write_buffer);
file_off += write_buffer_size;
write_buffer_read_pos += write_buffer_size;
}
else
{
U64 bytes_to_copy = Min(write_buffer_available_size, n->string.size - n_off);
write_buffer_write_pos += ring_write(write_buffer, write_buffer_size, write_buffer_write_pos, n->string.str + n_off, bytes_to_copy);
n_off += bytes_to_copy;
}
}
}
if(write_buffer_write_pos > write_buffer_read_pos)
{
os_file_write(file, r1u64(file_off, file_off + (write_buffer_write_pos-write_buffer_read_pos)), write_buffer);
}
}
os_file_close(file);
scratch_end(scratch);
}
return good;
}