From 7e17e6bb7e7d7547bc01fa92090f59699e937a72 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Mon, 3 Feb 2020 10:52:24 +0100 Subject: mo writing --- src/linux/platform.c | 3 ++- src/save.c | 15 ++++++++++----- src/windows/platform.c | 3 ++- 3 files changed, 14 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/linux/platform.c b/src/linux/platform.c index a4d85cf..140715b 100644 --- a/src/linux/platform.c +++ b/src/linux/platform.c @@ -196,7 +196,8 @@ bool platform_write_file_content(char *path, const char *mode, char *buffer, s32 } else { - fprintf(file, "%s", buffer); + fwrite(buffer, 1, len, file); // TODO(Aldrik): is this correct? + //fprintf(file, "%s", buffer); } //done: diff --git a/src/save.c b/src/save.c index a929d88..aaea5ee 100644 --- a/src/save.c +++ b/src/save.c @@ -6,14 +6,16 @@ void start_new_project(); -void write_mo_file(char *buffer, s32 buffer_size, s32 language_id) +s32 write_mo_file(char *buffer, s32 buffer_size, s32 language_id) { s32 identifier_table_size = current_project->terms.length * 8; s32 translation_table_size = current_project->terms.length * 8; + s32 size_written = 0; + mo_header header; header.magic_number = 0x950412de; - header.file_format_revision = 0; + header.file_format_revision = 1; header.number_of_strings = current_project->terms.length; header.identifier_table_offset = 0x40; // keep empty bytes (0x2-0x4) for format changes header.translation_table_offset = header.identifier_table_offset + identifier_table_size; @@ -34,7 +36,6 @@ void write_mo_file(char *buffer, s32 buffer_size, s32 language_id) memcpy(buffer+current_data_write_offset, t->name, new_identifier_entry.length); current_data_write_offset += new_identifier_entry.length+1; - identifier_table[i] = new_identifier_entry; } @@ -57,13 +58,17 @@ void write_mo_file(char *buffer, s32 buffer_size, s32 language_id) memcpy(buffer+current_data_write_offset, tr->value, new_translation_entry.length); current_data_write_offset += new_translation_entry.length+1; + break; } } translation_table[i] = new_translation_entry; } + size_written = current_data_write_offset; + memcpy(buffer, &header, sizeof(mo_header)); + return size_written; } void save_project_to_folder(char *path_buf) @@ -77,7 +82,7 @@ void save_project_to_folder(char *path_buf) char *buffer = mem_alloc(size); memset(buffer, 0, size); - write_mo_file(buffer, size, lang->id); + s32 size_written = write_mo_file(buffer, size, lang->id); char complete_path_buf[MAX_INPUT_LENGTH]; #ifdef OS_WIN @@ -87,7 +92,7 @@ void save_project_to_folder(char *path_buf) sprintf(complete_path_buf, "%s/%s.mo", path_buf, lang->name); #endif - platform_write_file_content(complete_path_buf, "wb", buffer, size); + platform_write_file_content(complete_path_buf, "wb", buffer, size_written); mem_free(buffer); } } diff --git a/src/windows/platform.c b/src/windows/platform.c index 12c9065..24fd6f6 100644 --- a/src/windows/platform.c +++ b/src/windows/platform.c @@ -854,7 +854,8 @@ bool platform_write_file_content(char *path, const char *mode, char *buffer, s32 } else { - fprintf(file, buffer); + fwrite(buffer, 1, len, file); + //fprintf(file, buffer); } //done: -- cgit v1.2.3-70-g09d2