Good point about shadowing index(3), I'll send a patch renaming all the uses of 'index'.

On Sun, Aug 27, 2017 at 4:56 AM, David Gibson <david@gibson.dropbear.id.au> wrote:
On Sat, Aug 26, 2017 at 06:26:20PM +0200, Damien Grassart wrote:
> The memmove() call should be using the index argument to determine the
> number of bytes to copy.
>
> Signed-off-by: Damien Grassart <damien@grassart.com>

No question that was a bug.  Fix applied.

Note for a possible future cleanup: calling identifiers 'index' is
usually a bad idea, because it shadows index(3) in the C library,
which means you can get really confusing errors (or lack of errors) if
you remove the declaration but not the users.

> ---
>  ccan/darray/darray.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/ccan/darray/darray.h b/ccan/darray/darray.h
> index 75112419..8d47645b 100644
> --- a/ccan/darray/darray.h
> +++ b/ccan/darray/darray.h
> @@ -225,7 +225,7 @@ typedef darray(unsigned long)  darray_ulong;
>  /* Warning, slow: Requires copying all elements after removed item. */
>  #define darray_remove(arr, index) do { \
>       if (index < arr.size-1)    \
> -             memmove(&(arr).item[index], &(arr).item[index+1], ((arr).size-1-i)*sizeof(*(arr).item)); \
> +             memmove(&(arr).item[index], &(arr).item[index+1], ((arr).size-1-index)*sizeof(*(arr).item)); \
>       (arr).size--;  \
>       } while(0)
>

--
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson