diff options
author | Dmitri Pal <dpal@redhat.com> | 2009-09-27 22:18:41 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2009-10-05 10:32:07 -0400 |
commit | ea7d823fa584b36e9a34a43c32dc476beede5ea2 (patch) | |
tree | bf3080e4b0b14c26cf4080d6c6d11d6781a0b471 /common/collection/collection_iter.c | |
parent | 26a9c1f22f31a87a83fbb59caea7c7565563f479 (diff) | |
download | sssd-ea7d823fa584b36e9a34a43c32dc476beede5ea2.tar.gz sssd-ea7d823fa584b36e9a34a43c32dc476beede5ea2.tar.bz2 sssd-ea7d823fa584b36e9a34a43c32dc476beede5ea2.zip |
COLLECTION Enhancing hashing and iteration functions
Diffstat (limited to 'common/collection/collection_iter.c')
-rw-r--r-- | common/collection/collection_iter.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/common/collection/collection_iter.c b/common/collection/collection_iter.c index f66fc308..0baefe83 100644 --- a/common/collection/collection_iter.c +++ b/common/collection/collection_iter.c @@ -382,8 +382,13 @@ void col_pin_iterator(struct collection_iterator *iterator) { TRACE_FLOW_STRING("col_iterator_add_pin", "Entry"); - while ((iterator->stack[iterator->stack_depth - 1] == NULL) && - (iterator->stack_depth)) { + if ((!iterator) || (!iterator->stack)) { + TRACE_FLOW_STRING("Invalid itertor", "Ingoring"); + return; + } + + while ((iterator->stack_depth) && + (iterator->stack[iterator->stack_depth - 1] == NULL)) { iterator->stack_depth--; } @@ -399,3 +404,24 @@ void col_pin_iterator(struct collection_iterator *iterator) TRACE_FLOW_STRING("col_iterator_add_pin", "Exit"); } + + +/* Rewinds iterator to the beginning */ +void col_rewind_iterator(struct collection_iterator *iterator) +{ + TRACE_FLOW_STRING("col_rewind_iterator", "Entry"); + + if ((!iterator) || (!iterator->stack)) { + TRACE_FLOW_STRING("Invalid itertor", "Ingoring"); + return; + } + + iterator->pin = iterator->top; + iterator->stack[0] = iterator->top; + iterator->stack_depth = 1; + iterator->item_level = 0; + iterator->pin_level = 0; + iterator->can_break = 0; + + TRACE_FLOW_STRING("col_rewind_iterator", "Exit"); +} |