diff options
author | 2018-10-13 11:52:59 +0200 | |
---|---|---|
committer | 2018-10-13 21:41:41 -0400 | |
commit | 8815f77ea086ba474df051144098b80739a0f3ae (patch) | |
tree | cd4546081961c4734ca850d72ce8c2f62ac91dc9 /core/taxonomy.c | |
parent | 5d3967ce846ed4876abeb43ebe2d919064050ed6 (diff) | |
download | subsurface-8815f77ea086ba474df051144098b80739a0f3ae.tar.gz |
Dive site: use own copy of taxonomy in dive-site-edit widget
The dive-site-edit widget uses a copy of the to-be-edited site
to compare with old values. Generally, this seems overkill
(the original dive-site can be used for such a comparison).
But one place where it can't simply be removed is the taxonomy,
because the widget needs a place to store the unsaved data.
Change the code to use an explicit taxonomy structure instead
of the one provided in the copy. This should ultimately allow
removal of the latter.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/taxonomy.c')
-rw-r--r-- | core/taxonomy.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/core/taxonomy.c b/core/taxonomy.c index 1689d1952..9592843f0 100644 --- a/core/taxonomy.c +++ b/core/taxonomy.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include "taxonomy.h" #include "gettext.h" +#include "subsurface-string.h" #include <stdlib.h> #include <stdio.h> @@ -41,6 +42,27 @@ void free_taxonomy(struct taxonomy_data *t) } } +void copy_taxonomy(struct taxonomy_data *orig, struct taxonomy_data *copy) +{ + if (orig->category == NULL) { + free_taxonomy(copy); + } else { + if (copy->category == NULL) + copy->category = alloc_taxonomy(); + for (int i = 0; i < TC_NR_CATEGORIES; i++) { + if (i < copy->nr) { + free((void *)copy->category[i].value); + copy->category[i].value = NULL; + } + if (i < orig->nr) { + copy->category[i] = orig->category[i]; + copy->category[i].value = copy_string(orig->category[i].value); + } + } + copy->nr = orig->nr; + } +} + int taxonomy_index_for_category(struct taxonomy_data *t, enum taxonomy_category cat) { for (int i = 0; i < t->nr; i++) |