summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vppinfra/pool.h7
-rw-r--r--src/vppinfra/vec_bootstrap.h4
2 files changed, 6 insertions, 5 deletions
diff --git a/src/vppinfra/pool.h b/src/vppinfra/pool.h
index 99138386fe6..1a414aef65f 100644
--- a/src/vppinfra/pool.h
+++ b/src/vppinfra/pool.h
@@ -571,9 +571,10 @@ do { \
/* works only for pool of pointers, e is declared inside macro */
#define pool_foreach_pointer(e, p) \
if (p) \
- for (typeof ((p)[0]) *_t = (p) + pool_get_first_index (p), (e) = *_t; \
- _t < vec_end (p); \
- _t = (p) + pool_get_next_index (p, _t - (p)), (e) = *_t)
+ for (typeof ((p)[0]) *_t = (p) + pool_get_first_index (p), (e) = *_t, \
+ *_end = vec_end (p); \
+ _t < _end; _t = (p) + pool_get_next_index (p, _t - (p)), \
+ (e) = _t < _end ? *_t : (e))
/**
* @brief Remove all elements from a pool in a safe way
diff --git a/src/vppinfra/vec_bootstrap.h b/src/vppinfra/vec_bootstrap.h
index 5ea7a8003f5..5d386b1eaad 100644
--- a/src/vppinfra/vec_bootstrap.h
+++ b/src/vppinfra/vec_bootstrap.h
@@ -240,8 +240,8 @@ _vec_set_len (void *v, uword len, uword elt_sz)
#define vec_foreach_pointer(e, v) \
if (v) \
- for (typeof (**v) **__ep = (v), *(e) = *__ep; __ep - (v) < vec_len (v); \
- __ep++, (e) = *__ep)
+ for (typeof (**v) **__ep = (v), **__end = vec_end (v), *(e) = *__ep; \
+ __ep < __end; __ep++, (e) = __ep < __end ? *__ep : (e))
#endif /* included_clib_vec_bootstrap_h */