vppinfra: type prove vec_new and vec_resize

Some vector functions (e.g. vec_new) pass the vector pointer through
vec_resize. This turn the pointer from a real type into a void pointer.
Explicitly cast the pointer back to its original type to catch type
mismatches.

Type: improvement

Signed-off-by: Andreas Schultz <andreas.schultz@travelping.com>
Change-Id: Id13e52d4f038af2cee28e5abf1aca720f8909378
This commit is contained in:
Andreas Schultz
2020-03-26 14:18:52 +00:00
committed by Damjan Marion
parent 24e2c50bf3
commit c458c49366

View File

@ -116,8 +116,12 @@ void *vec_resize_allocate_memory (void *v,
@return v_prime pointer to resized vector, may or may not equal v
*/
#define _vec_resize_numa(V,L,DB,HB,A,S) \
_vec_resize_inline(V,L,DB,HB,clib_max((__alignof__((V)[0])),(A)),(S))
#define _vec_resize_numa(V,L,DB,HB,A,S) \
({ \
__typeof__ ((V)) _V; \
_V = _vec_resize_inline(V,L,DB,HB,clib_max((__alignof__((V)[0])),(A)),(S)); \
_V; \
})
#define _vec_resize(V,L,DB,HB,A) \
_vec_resize_numa(V,L,DB,HB,A,VEC_NUMA_UNSPECIFIED)
@ -330,10 +334,10 @@ do { \
@param A alignment (may be zero)
@return V new vector
*/
#define vec_new_ha(T,N,H,A) \
({ \
word _v(n) = (N); \
_vec_resize ((T *) 0, _v(n), _v(n) * sizeof (T), (H), (A)); \
#define vec_new_ha(T,N,H,A) \
({ \
word _v(n) = (N); \
(T *)_vec_resize ((T *) 0, _v(n), _v(n) * sizeof (T), (H), (A)); \
})
/** \brief Create new vector of given type and length