#define _CRT_SECURE_NO_WARNINGS #include #include #include #include "administration_writer.hpp" bool administration_writer_save_cost_centers() { return false; } bool administration_writer_save_tax_brackets() { struct zip_t *zip = zip_open(administration_file_path_get(), 0, 'w'); if (!zip) { zip = zip_open(administration_file_path_get(), 0, 'a'); if (!zip) { return false; } } if (zip_entry_open(zip, ADMIN_FILE_SETTINGS) < 0) { return false; } // Get all data. u32 num_brackets = administration_tax_bracket_count(); u32 buffer_size = sizeof(country_tax_bracket) * num_brackets; country_tax_bracket* bracket_buffer = (country_tax_bracket*)malloc(buffer_size); num_brackets = administration_tax_bracket_get_all(bracket_buffer); int buf_length = num_brackets * 500; // Ballpark file content size. char* settings_content = (char*)malloc(buf_length); memset(settings_content, 0, buf_length); char* orig_content = settings_content; //// Tax brackets. settings_content += sprintf(settings_content, "\n"); for (u32 i = 0; i < num_brackets; i++) { country_tax_bracket c = bracket_buffer[i]; settings_content += sprintf(settings_content, "\t\n"); settings_content += sprintf(settings_content, "\t\t%s\n", c.id); settings_content += sprintf(settings_content, "\t\t%s\n", c.country_code); settings_content += sprintf(settings_content, "\t\t%.2f\n", c.rate); settings_content += sprintf(settings_content, "\t\t%s\n", c.description); settings_content += sprintf(settings_content, "\t\n"); } settings_content += sprintf(settings_content, ""); int final_length = (int)strlen(orig_content); bool result = true; if (!xml_parse_document((uint8_t*)orig_content, final_length)) { result = false; } if (zip_entry_write(zip, orig_content, final_length) < 0) { result = false; } zip_entry_close(zip); zip_close(zip); free(bracket_buffer); free(orig_content); return result; }