fixes to new save system

master
Allen Webster 2016-08-26 15:35:50 -04:00
parent fc76531ca1
commit 7ada40c1bc
3 changed files with 52 additions and 42 deletions

View File

@ -985,17 +985,26 @@ DOC_SEE(Buffer_Create_Flag)
String fname = make_string(filename, filename_len); String fname = make_string(filename, filename_len);
Temp_Memory temp = begin_temp_memory(part); Temp_Memory temp = begin_temp_memory(part);
if (filename != 0){ if (filename != 0){
Editing_File_Canon_Name canon; Editing_File *file = 0;
b32 do_new_file = false;
Plat_Handle handle = {0};
Editing_File_Canon_Name canon = {0};
if (get_canon_name(system, &canon, fname)){ if (get_canon_name(system, &canon, fname)){
Editing_File *file = working_set_canon_contains(working_set, canon.name); file = working_set_canon_contains(working_set, canon.name);
}
else{
do_new_file = true;
}
if (file == 0){ if (!file){
b32 do_new_file = false; file = working_set_name_contains(working_set, fname);
}
Plat_Handle handle = {0};
if (!file){
if (!do_new_file){
if (flags & BufferCreate_AlwaysNew){ if (flags & BufferCreate_AlwaysNew){
do_new_file = true; do_new_file = true;
} }
@ -1004,49 +1013,49 @@ DOC_SEE(Buffer_Create_Flag)
do_new_file = true; do_new_file = true;
} }
} }
}
if (!do_new_file){ if (!do_new_file){
Assert(!handle_equal(handle, handle_zero())); Assert(!handle_equal(handle, handle_zero()));
i32 size = system->load_size(handle); i32 size = system->load_size(handle);
b32 in_general_mem = false; b32 in_general_mem = false;
char *buffer = push_array(part, char, size); char *buffer = push_array(part, char, size);
if (buffer == 0){ if (buffer == 0){
buffer = (char*)general_memory_allocate(general, size); buffer = (char*)general_memory_allocate(general, size);
Assert(buffer != 0); Assert(buffer != 0);
in_general_mem = true; in_general_mem = true;
}
if (system->load_file(handle, buffer, size)){
file = working_set_alloc_always(working_set, general);
if (file){
buffer_bind_file(general, working_set, file, canon.name);
buffer_bind_name(general, working_set, file, fname);
init_normal_file(system, models, file, buffer, size);
fill_buffer_summary(&result, file, cmd);
}
}
if (in_general_mem){
general_memory_free(general, buffer);
}
system->load_close(handle);
} }
else{
if (system->load_file(handle, buffer, size)){
file = working_set_alloc_always(working_set, general); file = working_set_alloc_always(working_set, general);
if (file){ if (file){
buffer_bind_file(general, working_set, file, canon.name);
buffer_bind_name(general, working_set, file, fname); buffer_bind_name(general, working_set, file, fname);
init_normal_file(system, models, file, 0, 0); init_normal_file(system, models, file, buffer, size);
fill_buffer_summary(&result, file, cmd); fill_buffer_summary(&result, file, cmd);
} }
} }
if (in_general_mem){
general_memory_free(general, buffer);
}
system->load_close(handle);
} }
else{ else{
fill_buffer_summary(&result, file, cmd); file = working_set_alloc_always(working_set, general);
if (file){
buffer_bind_name(general, working_set, file, fname);
init_normal_file(system, models, file, 0, 0);
fill_buffer_summary(&result, file, cmd);
}
} }
} }
else{
fill_buffer_summary(&result, file, cmd);
}
} }
end_temp_memory(temp); end_temp_memory(temp);

View File

@ -1022,14 +1022,12 @@ file_create_from_string(System_Functions *system, Models *models,
i32 scratch_size = partition_remaining(part); i32 scratch_size = partition_remaining(part);
Assert(scratch_size > 0); Assert(scratch_size > 0);
b32 init_success = buffer_end_init(&init, part->base + part->pos, scratch_size); b32 init_success = buffer_end_init(&init, part->base + part->pos, scratch_size);
AllowLocal(init_success); Assert(init_success); AllowLocal(init_success); Assert(init_success);
if (buffer_size(&file->state.buffer) < val.size){ if (buffer_size(&file->state.buffer) < val.size){
file->settings.dos_write_mode = 1; file->settings.dos_write_mode = 1;
} }
file_synchronize_times(system, file); file_synchronize_times(system, file);
i16 font_id = models->global_font.font_id; i16 font_id = models->global_font.font_id;
@ -1037,6 +1035,7 @@ file_create_from_string(System_Functions *system, Models *models,
Render_Font *font = get_font_info(font_set, font_id)->font; Render_Font *font = get_font_info(font_set, font_id)->font;
float *advance_data = 0; float *advance_data = 0;
if (font) advance_data = font->advance_data; if (font) advance_data = font->advance_data;
file_measure_starts_widths(system, general, &file->state.buffer, advance_data); file_measure_starts_widths(system, general, &file->state.buffer, advance_data);
file->settings.read_only = read_only; file->settings.read_only = read_only;

View File

@ -1281,7 +1281,7 @@ Sys_Save_File_Sig(system_save_file){
GENERIC_WRITE, GENERIC_WRITE,
0, 0,
0, 0,
CREATE_NEW, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, FILE_ATTRIBUTE_NORMAL,
0); 0);
@ -1298,6 +1298,8 @@ Sys_Save_File_Sig(system_save_file){
} }
written_total += written_size; written_total += written_size;
} }
CloseHandle(file);
} }
return(result); return(result);