diff options
Diffstat (limited to 'src/administration_writer.cpp')
| -rw-r--r-- | src/administration_writer.cpp | 45 |
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; } |
