summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/administration.cpp7
-rw-r--r--src/administration_reader.cpp2
-rw-r--r--src/administration_writer.cpp45
3 files changed, 22 insertions, 32 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index c5f863b..30fbd76 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -500,11 +500,14 @@ void administration_create_empty(char* save_file)
strops_copy(g_administration.path, save_file, sizeof(g_administration.path));
strops_copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
- administration_company_info_set(administration_contact_create_empty());
+ administration_company_info_set(administration_contact_create_empty());
+}
+void administration_create_default(char* save_file)
+{
+ administration_create_empty(save_file);
administration_create_default_tax_brackets();
administration_create_default_cost_centers();
-
//administration_create_debug_data();
}
diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp
index b3caeac..4fd1247 100644
--- a/src/administration_reader.cpp
+++ b/src/administration_reader.cpp
@@ -18,7 +18,7 @@ bool administration_reader_open_new()
if (!save_path) return false;
- administration_create_empty(save_path);
+ administration_create_default(save_path);
return true;
}
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index 4d4f5fe..618b36e 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -80,23 +80,14 @@ static char* administration_writer_copy_template(const char* template_str, int*
static bool administration_writer_entry_exists(char* entry)
{
- bool entry_exists = false;
struct zip_t *zip_read = zip_open(administration_file_path_get(), 0, 'r');
- int i, n = (int)zip_entries_total(zip_read);
- for (i = 0; i < n; ++i) {
- zip_entry_openbyindex(zip_read, i);
- const char *entry_name = zip_entry_name(zip_read);
- if (strcmp(entry_name, entry) == 0) {
- entry_exists = true;
- break;
- }
- zip_entry_close(zip_read);
- }
+ int result = zip_entry_open(zip_read, entry);
zip_close(zip_read);
- return entry_exists;
+
+ return result == 0;
}
-bool administration_writer_delete_entry(char* id)
+static bool _administration_writer_delete_entry_by_name(char* entry)
{
STOPWATCH_START;
@@ -104,41 +95,37 @@ bool administration_writer_delete_entry(char* id)
struct zip_t *zip_write = zip_open(administration_file_path_get(), 0, 'a');
if (!zip_write) zip_write = zip_open(administration_file_path_get(), 0, 'w');
- char final_path[50];
- snprintf(final_path, 50, "%s.xml", id);
-
- char* indices[1] = {final_path};
+ char* indices[1] = {entry};
if (zip_entries_delete(zip_write, indices, 1) < 0) result = 0;
zip_close(zip_write);
- log_add("Deleted entry '%s' in %.3fms.", id, STOPWATCH_TIME);
+ log_add("Deleted entry '%s' in %.3fms.", entry, STOPWATCH_TIME);
return result;
}
+bool administration_writer_delete_entry(char* id)
+{
+ char final_path[50];
+ snprintf(final_path, 50, "%s.xml", id);
+
+ return _administration_writer_delete_entry_by_name(final_path);
+}
+
static bool administration_writer_write_to_zip(char* entry_to_replace, char* orig_content, int final_length)
{
bool result = 1;
bool entry_exists = administration_writer_entry_exists(entry_to_replace);
+ if (entry_exists) _administration_writer_delete_entry_by_name(entry_to_replace);
struct zip_t *zip_write = zip_open(administration_file_path_get(), 0, 'a');
if (!zip_write) zip_write = zip_open(administration_file_path_get(), 0, 'w');
- if (entry_exists)
- {
- char* indices[1] = {entry_to_replace};
- zip_entries_delete(zip_write, indices, 1);
- zip_close(zip_write);
-
- zip_write = zip_open(administration_file_path_get(), 0, 'a');
- }
-
zip_entry_open(zip_write, entry_to_replace);
if (zip_entry_write(zip_write, orig_content, final_length) < 0) result = 0;
zip_entry_close(zip_write);
-
- zip_close(zip_write);
+ zip_close(zip_write);
return result;
}