On Mon, May 05, 2025 at 06:29:56PM +0200, Martin Wilck wrote:
> Try to silence a gcc warning. Also, replace the wrong-looking
> VECTOR_DEFAULT_SIZE by 1 (after all, we've just deleted a single
> element).

I agree that VECTOR_DEFAULT_SIZE is pointless. But we shoud also stop
adding VECTOR_DEFAULT_SIZE to v->allocated in vector_alloc_slot() and
dividing v->allocated by VECTOR_DEFAULT_SIZE in VECTOR_SIZE(), otherwise
vector_del_slot() doesn't match vector_alloc_slot() and VECTOR_SIZE().
My vote is for VECTOR_DEFAULT_SIZE to go away completely.

-Ben

> 
> Found by Fedora's static analysis [1].
> 
> [1] 
> https://openscanhub.fedoraproject.org/task/51915/log/device-mapper-multipath-0.11.1-1.fc43/scan-results.html
> 
> Signed-off-by: Martin Wilck <mwi...@suse.com>
> ---
>  libmpathutil/vector.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/libmpathutil/vector.c b/libmpathutil/vector.c
> index 7f763cb..3386651 100644
> --- a/libmpathutil/vector.c
> +++ b/libmpathutil/vector.c
> @@ -107,28 +107,28 @@ int find_slot(vector v, const void *addr)
>  void
>  vector_del_slot(vector v, int slot)
>  {
> -     int i;
> +     int i, allocated;
>  
>       if (!v || !v->allocated || slot < 0 || slot >= VECTOR_SIZE(v))
>               return;
>  
>       for (i = slot + 1; i < VECTOR_SIZE(v); i++)
> -             v->slot[i-1] = v->slot[i];
> +             v->slot[i - 1] = v->slot[i];
>  
> -     v->allocated -= VECTOR_DEFAULT_SIZE;
> +     allocated = v->allocated - 1;
>  
> -     if (v->allocated <= 0) {
> +     if (allocated <= 0) {
>               free(v->slot);
>               v->slot = NULL;
>               v->allocated = 0;
>       } else {
>               void *new_slot;
>  
> -             new_slot = realloc(v->slot, sizeof (void *) * v->allocated);
> -             if (!new_slot)
> -                     v->allocated += VECTOR_DEFAULT_SIZE;
> -             else
> +             new_slot = realloc(v->slot, sizeof(void *) * allocated);
> +             if (new_slot) {
>                       v->slot = new_slot;
> +                     v->allocated = allocated;
> +             }
>       }
>  }
>  
> -- 
> 2.49.0


Reply via email to