From: "Richard W.M. Jones" <rjo...@redhat.com> Original commit message:
Duplicate a vector, optionally in-place. Porting notes: this port of nbdkit commit 78b72746e547 ("vector: Add vector_duplicate function", 2021-08-22) includes: - The renaming of vector fields from nbdkit commit 0b0eece73f04 ("common/utils/vector: Rename `size` to `len`", 2021-11-07); otherwise, the patch wouldn't compile. - The effect of libnbd commit 8fb8ffb53477 ("build: Silence some cppcheck warnings", 2022-11-02), which added "__attribute__((__unused__))" to the other vector APIs. - The effect of libnbd commit b5101fbc59cb ("use space consistently in function and function-like macro invocations", 2023-02-22), which inserted a space between "__attribute__" and "((__unused__))". Signed-off-by: Laszlo Ersek <ler...@redhat.com> (cherry picked from nbdkit commit 78b72746e547150290c2b0f2fe3ad5fe69817904) --- common/utils/vector.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/common/utils/vector.h b/common/utils/vector.h index bdba02f7ebee..d0b250db87fc 100644 --- a/common/utils/vector.h +++ b/common/utils/vector.h @@ -181,6 +181,23 @@ (void *) compare); \ } \ \ + /* Make a new vector with the same elements. */ \ + static inline int __attribute__ ((__unused__)) \ + name##_duplicate (name *v, name *copy) \ + { \ + /* Note it's allowed for v and copy to be the same pointer. */ \ + type *vptr = v->ptr; \ + type *newptr; \ + size_t len = v->len * sizeof (type); \ + \ + newptr = malloc (len); \ + if (newptr == NULL) return -1; \ + memcpy (newptr, vptr, len); \ + copy->ptr = newptr; \ + copy->len = copy->cap = v->len; \ + return 0; \ + } \ + \ /* End with duplicate declaration, so callers must supply ';'. */ \ struct name _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs