summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-11-04 21:29:33 +0000
committerPaul Buetow <paul@buetow.org>2008-11-04 21:29:33 +0000
commit37c687c229f89202e5625bc3d3f9b1c85cb94b51 (patch)
treed479b5a573854192f6a8703fe5f1c4bde6dae5fc /src
parentff0828f06a1f317681c45402feda48bde592a076 (diff)
array_delete_iterate implemented..
Diffstat (limited to 'src')
-rw-r--r--src/build.h2
-rw-r--r--src/core/token.c9
-rw-r--r--src/data/array.c17
-rw-r--r--src/data/array.h1
4 files changed, 23 insertions, 6 deletions
diff --git a/src/build.h b/src/build.h
index 9b4930d..204d15b 100644
--- a/src/build.h
+++ b/src/build.h
@@ -35,7 +35,7 @@
#ifndef BUILD_H
#define BUILD_H
-#define BUILDNR 9335
+#define BUILDNR 9340
#define OS_FREEBSD
#endif
diff --git a/src/core/token.c b/src/core/token.c
index ee2a0b8..16d0eab 100644
--- a/src/core/token.c
+++ b/src/core/token.c
@@ -319,7 +319,8 @@ void token_copy_vals(Token *p_token_to, Token *p_token_from) {
p_token_to->c_filename = p_token_from->c_filename;
if (NULL != p_token_from->p_array)
- p_token_to->p_array = array_new_copy(p_token_from);
+ // Copy all tokens by reference (pointers)
+ p_token_to->p_array = array_new_copy(p_token_from->p_array);
}
void
@@ -349,10 +350,8 @@ token_delete(Token *p_token) {
if (p_token->c_val)
free(p_token->c_val);
- if (NULL != p_token->p_array) {
- array_iterate(p_token->p_array, token_delete_cb);
- array_delete(p_token->p_array);
- }
+ if (NULL != p_token->p_array)
+ array_delete_iterate(p_token->p_array, token_delete_cb);
free(p_token);
}
diff --git a/src/data/array.c b/src/data/array.c
index 6a2b1fa..553d6f5 100644
--- a/src/data/array.c
+++ b/src/data/array.c
@@ -84,6 +84,23 @@ array_delete(Array *p_array) {
}
void
+array_delete_iterate(Array *p_array, void (*func)(void *)) {
+ if (!p_array)
+ return;
+
+ array_iterate(p_array, func);
+
+ if (p_array->i_size)
+ for (int i = p_array->i_size - 1; i >= 0; --i)
+ arrayelement_delete(p_array->pp_ae[i]);
+
+ if (p_array->pp_ae)
+ free(p_array->pp_ae);
+
+ free(p_array);
+}
+
+void
array_set(Array *p_array, int i_index, void *p_val) {
if (p_array->i_size > i_index) {
p_array->pp_ae[i_index]->p_val = p_val;
diff --git a/src/data/array.h b/src/data/array.h
index 75f6365..14e3851 100644
--- a/src/data/array.h
+++ b/src/data/array.h
@@ -64,6 +64,7 @@ Array *array_new();
Array *array_new_size(int i_size);
Array *array_new_copy(Array *p_array);
void array_delete(Array *p_array);
+void array_delete_iterate(Array *p_array, void (*func)(void*));
void array_set(Array *p_array, int i_index, void *p_val);
void array_insert(Array *p_array, int i_index, void *p_val);
void *array_remove(Array *p_array, int i_index);