mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-17 23:01:25 -07:00
pass over rdi dumping code; relocate to rdi_format_local; eliminate redundant helpers; plug into radbin
This commit is contained in:
+31
-4
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user