summaryrefslogtreecommitdiff
path: root/src/administration_writer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/administration_writer.cpp')
-rw-r--r--src/administration_writer.cpp45
1 files changed, 16 insertions, 29 deletions
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;
}