aboutsummaryrefslogtreecommitdiffstats
path: root/src/vppinfra
diff options
context:
space:
mode:
authorBenoît Ganne <bganne@cisco.com>2019-07-22 14:21:46 +0200
committerDamjan Marion <dmarion@me.com>2019-10-22 08:14:26 +0000
commit8a4bfdae87286ed281df855c58b669eb6b76aaf8 (patch)
treec7d98f8132069974782dbc0d88530d623153fabf /src/vppinfra
parent26ea1465aeb2934fd86a372666cc3c65e190826c (diff)
vppinfra: add vec_set_len()
l2-flood and bier nodes reset vector length without updating it to its effective size. Introduce a helper to do it (this allows ASAN to keep track of the new vector size). Type: refactor Change-Id: I2d652550c440f0553a2b49c3ee3d37b49ebc16c3 Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/vppinfra')
-rw-r--r--src/vppinfra/vec_bootstrap.h19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/vppinfra/vec_bootstrap.h b/src/vppinfra/vec_bootstrap.h
index fec0df08143..7fb016fe8d2 100644
--- a/src/vppinfra/vec_bootstrap.h
+++ b/src/vppinfra/vec_bootstrap.h
@@ -142,12 +142,6 @@ vec_aligned_header_end (void *v, uword header_bytes, uword align)
#define vec_len(v) ((v) ? _vec_len(v) : 0)
-/** \brief Reset vector length to zero
- NULL-pointer tolerant
-*/
-
-#define vec_reset_length(v) do { if (v) _vec_len (v) = 0; } while (0)
-
/** \brief Number of data bytes in vector. */
#define vec_bytes(v) (vec_len (v) * sizeof (v[0]))
@@ -165,6 +159,19 @@ vec_aligned_header_end (void *v, uword header_bytes, uword align)
/** \brief Total number of elements that can fit into vector. */
#define vec_max_len(v) (vec_capacity(v,0) / sizeof (v[0]))
+/** \brief Set vector length to a user-defined value */
+#define vec_set_len(v, l) do { \
+ ASSERT(v); \
+ ASSERT((l) <= vec_max_len(v)); \
+ _vec_len(v) = (l); \
+} while (0)
+
+/** \brief Reset vector length to zero
+ NULL-pointer tolerant
+*/
+
+#define vec_reset_length(v) do { if (v) vec_set_len (v, 0); } while (0)
+
/** \brief End (last data address) of vector. */
#define vec_end(v) ((v) + vec_len (v))