summaryrefslogtreecommitdiff
path: root/include/asterisk/vector.h
diff options
context:
space:
mode:
authorBadalyan Vyacheslav <v.badalyan@open-bs.ru>2016-10-10 17:59:58 -0400
committerBadalyan Vyacheslav <v.badalyan@open-bs.ru>2016-10-11 07:12:45 -0400
commit17031f12fe62708ca84db3a8551267ca2a0e24d8 (patch)
tree82a5cc550dc31f4cad97bfc871d01b679fd07560 /include/asterisk/vector.h
parent3ab7fae96b610a69c0a4f7fa639c658810858e63 (diff)
vector: After remove element recheck index
Small fix. It is necessary to double-check the index that we just removed because there is a new element. ASTERISK-26453 #close Change-Id: Ib947fa94dc91dcd9341f357f1084782c64434eb7
Diffstat (limited to 'include/asterisk/vector.h')
-rw-r--r--include/asterisk/vector.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/include/asterisk/vector.h b/include/asterisk/vector.h
index b4a8a2c11..c74f0a89b 100644
--- a/include/asterisk/vector.h
+++ b/include/asterisk/vector.h
@@ -367,11 +367,13 @@
int count = 0; \
size_t idx; \
typeof(value) __value = (value); \
- for (idx = 0; idx < (vec)->current; ++idx) { \
+ for (idx = 0; idx < (vec)->current; ) { \
if (cmp((vec)->elems[idx], __value)) { \
cleanup((vec)->elems[idx]); \
AST_VECTOR_REMOVE_UNORDERED((vec), idx); \
++count; \
+ } else { \
+ ++idx; \
} \
} \
count; \
@@ -417,14 +419,16 @@
int count = 0; \
size_t idx; \
typeof(value) __value = (value); \
- for (idx = 0; idx < (vec)->current; ++idx) { \
+ for (idx = 0; idx < (vec)->current; ) { \
if (cmp((vec)->elems[idx], __value)) { \
cleanup((vec)->elems[idx]); \
- AST_VECTOR_REMOVE_ORDERED((vec), idx); \
+ AST_VECTOR_REMOVE_ORDERED((vec), idx); \
++count; \
+ } else { \
+ ++idx; \
} \
} \
- oount; \
+ count; \
})
/*!
@@ -445,7 +449,7 @@
for (idx = 0; idx < (vec)->current; ++idx) { \
if (cmp((vec)->elems[idx], __value)) { \
cleanup((vec)->elems[idx]); \
- AST_VECTOR_REMOVE_ORDERED((vec), idx); \
+ AST_VECTOR_REMOVE_ORDERED((vec), idx); \
res = 0; \
break; \
} \