summaryrefslogtreecommitdiffstats
path: root/utils/storage
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2010-09-30 10:41:11 +0800
committerPeng Wu <alexepico@gmail.com>2010-09-30 10:42:54 +0800
commit03eea13fa336cd9c8d3e6e926cf5c77b98f5bc06 (patch)
treeefae664bd6434bf345a2af416099118e2b603cef /utils/storage
parent67d37c71948295ce86dd7b3d1101c61844dad554 (diff)
downloadlibpinyin-03eea13fa336cd9c8d3e6e926cf5c77b98f5bc06.tar.gz
libpinyin-03eea13fa336cd9c8d3e6e926cf5c77b98f5bc06.tar.xz
libpinyin-03eea13fa336cd9c8d3e6e926cf5c77b98f5bc06.zip
add duplicate entry check in taglib_add_tag
Diffstat (limited to 'utils/storage')
-rw-r--r--utils/storage/tag_utility.cpp11
-rw-r--r--utils/storage/tag_utility.h5
2 files changed, 13 insertions, 3 deletions
diff --git a/utils/storage/tag_utility.cpp b/utils/storage/tag_utility.cpp
index 21d84b0..31a5e63 100644
--- a/utils/storage/tag_utility.cpp
+++ b/utils/storage/tag_utility.cpp
@@ -1,3 +1,4 @@
+#include <string.h>
#include <assert.h>
#include <glib.h>
#include "tag_utility.h"
@@ -63,10 +64,18 @@ bool taglib_add_tag(int line_type, const char * line_tag, int num_of_values,
const char * required_tags[], const char * ignored_tags[]){
GArray * tag_array = (GArray *) g_ptr_array_index(g_tagutils_stack,
g_tagutils_stack->len - 1);
+
+ /* some duplicate tagname or line_type check here. */
+ for ( size_t i = 0; i < tag_array->len; ++i) {
+ tag_entry * entry = &g_array_index(tag_array, tag_entry, i);
+ if ( entry->m_line_type == line_type ||
+ strcmp( entry->m_line_tag, line_tag ) == 0 )
+ return false;
+ }
+
tag_entry entry = tag_entry_copy(line_type, line_tag, num_of_values,
(char **)required_tags,
(char **)ignored_tags);
- /* TODO: maybe also do some duplicate tagname or line_type check here. */
g_array_append_val(tag_array, entry);
return true;
}
diff --git a/utils/storage/tag_utility.h b/utils/storage/tag_utility.h
index fd5e89e..0b7ed7a 100644
--- a/utils/storage/tag_utility.h
+++ b/utils/storage/tag_utility.h
@@ -69,8 +69,9 @@ bool taglib_fini();
#define TAGLIB_IGNORED_TAGS const char * ignored_tags_saved[]
#define TAGLIB_END_ADD_TAG \
- taglib_add_tag(line_type_saved, line_tag_saved, num_of_values_saved, \
- required_tags_saved, ignored_tags_saved); \
+ assert(taglib_add_tag(line_type_saved, line_tag_saved, \
+ num_of_values_saved, \
+ required_tags_saved, ignored_tags_saved)); \
};
#endif