aboutsummaryrefslogtreecommitdiffstats
path: root/gawkapi.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-06-19 20:54:19 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-06-19 20:54:19 +0300
commitfd3c1195711270a001d860770098b8c0d9118c10 (patch)
treec5e0539da1f8f826b3f17839e6186d800b8f13c7 /gawkapi.c
parent3a40be8a79f9d4e4bb205cca4eb15b1ee811f60c (diff)
downloadegawk-fd3c1195711270a001d860770098b8c0d9118c10.tar.gz
egawk-fd3c1195711270a001d860770098b8c0d9118c10.tar.bz2
egawk-fd3c1195711270a001d860770098b8c0d9118c10.zip
Delete marked elements from flattened array.
Diffstat (limited to 'gawkapi.c')
-rw-r--r--gawkapi.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gawkapi.c b/gawkapi.c
index 92403dce..5eb16881 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -637,15 +637,24 @@ api_release_flattened_array(awk_ext_id_t id,
list = (NODE **) data->opaque2;
- /* FIXME: Delete items flagged for delete. */
+ /* Delete items flagged for delete. */
+ for (i = 0; i < data->count; i++) {
+ if ((data->elements[i].flags & AWK_ELEMENT_DELETE) != 0) {
+ /* let the other guy do the work */
+ (void) api_del_array_element(id, a_cookie,
+ & data->elements[i].index);
+ }
+ }
/* free index nodes */
- for (i = 0; i < 2 * array->table_size; i += 2)
+ for (i = 0; i < 2 * array->table_size; i += 2) {
unref(list[i]);
+ }
efree(list);
+ efree(data);
- return true; /* for now */
+ return true;
}
gawk_api_t api_impl = {