From 24e2694b302f6602e0fc7808a53a766cb983dfb4 Mon Sep 17 00:00:00 2001 From: Nir Soffer Date: Fri, 5 Nov 2021 22:59:38 +0200 Subject: [PATCH] common/utils/vector: Rename `alloc` to `cap` The `alloc` field is the maximum number of items you can append to a vector before it need to be resized. This may confuse users with the size of the `ptr` array which is `alloc * itemsize`. Rename to "cap", common term for this property in many languages (e.g C++, Rust, Go). Tested with "make check". Tests requiring root or external libraries (vddk) not tested. Ported from libnbd commit e3c7f02a2a844295564c832108d36c939c4e4ecf. (cherry picked from commit 75a44237c4463524dbf7951bb62b59c373c85865) --- common/allocators/malloc.c | 24 ++++++++++++------------ common/utils/vector.c | 16 ++++++++-------- common/utils/vector.h | 12 ++++++------ plugins/vddk/reexec.c | 2 +- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/common/allocators/malloc.c b/common/allocators/malloc.c index 59409c24..f7474465 100644 --- a/common/allocators/malloc.c +++ b/common/allocators/malloc.c @@ -88,16 +88,16 @@ extend (struct m_alloc *ma, uint64_t new_size) ACQUIRE_WRLOCK_FOR_CURRENT_SCOPE (&ma->lock); size_t old_size, n; - if (ma->ba.alloc < new_size) { - old_size = ma->ba.alloc; - n = new_size - ma->ba.alloc; + if (ma->ba.cap < new_size) { + old_size = ma->ba.cap; + n = new_size - ma->ba.cap; #ifdef HAVE_MUNLOCK /* Since the memory might be moved by realloc, we must unlock the * original array. */ if (ma->use_mlock) - munlock (ma->ba.ptr, ma->ba.alloc); + munlock (ma->ba.ptr, ma->ba.cap); #endif if (bytearray_reserve (&ma->ba, n) == -1) { @@ -110,7 +110,7 @@ extend (struct m_alloc *ma, uint64_t new_size) #ifdef HAVE_MLOCK if (ma->use_mlock) { - if (mlock (ma->ba.ptr, ma->ba.alloc) == -1) { + if (mlock (ma->ba.ptr, ma->ba.cap) == -1) { nbdkit_error ("allocator=malloc: mlock: %m"); return -1; } @@ -138,11 +138,11 @@ m_alloc_read (struct allocator *a, void *buf, /* Avoid reading beyond the end of the allocated array. Return * zeroes for that part. */ - if (offset >= ma->ba.alloc) + if (offset >= ma->ba.cap) memset (buf, 0, count); - else if (offset + count > ma->ba.alloc) { - memcpy (buf, ma->ba.ptr + offset, ma->ba.alloc - offset); - memset (buf + ma->ba.alloc - offset, 0, offset + count - ma->ba.alloc); + else if (offset + count > ma->ba.cap) { + memcpy (buf, ma->ba.ptr + offset, ma->ba.cap - offset); + memset (buf + ma->ba.cap - offset, 0, offset + count - ma->ba.cap); } else memcpy (buf, ma->ba.ptr + offset, count); @@ -191,9 +191,9 @@ m_alloc_zero (struct allocator *a, uint64_t count, uint64_t offset) /* Try to avoid extending the array, since the unallocated part * always reads as zero. */ - if (offset < ma->ba.alloc) { - if (offset + count > ma->ba.alloc) - memset (ma->ba.ptr + offset, 0, ma->ba.alloc - offset); + if (offset < ma->ba.cap) { + if (offset + count > ma->ba.cap) + memset (ma->ba.ptr + offset, 0, ma->ba.cap - offset); else memset (ma->ba.ptr + offset, 0, count); } diff --git a/common/utils/vector.c b/common/utils/vector.c index 7df17e1b..a4b43ce7 100644 --- a/common/utils/vector.c +++ b/common/utils/vector.c @@ -41,21 +41,21 @@ int generic_vector_reserve (struct generic_vector *v, size_t n, size_t itemsize) { void *newptr; - size_t reqalloc, newalloc; + size_t reqcap, newcap; - reqalloc = v->alloc + n; - if (reqalloc < v->alloc) + reqcap = v->cap + n; + if (reqcap < v->cap) return -1; /* overflow */ - newalloc = (v->alloc * 3 + 1) / 2; + newcap = (v->cap * 3 + 1) / 2; - if (newalloc < reqalloc) - newalloc = reqalloc; + if (newcap < reqcap) + newcap = reqcap; - newptr = realloc (v->ptr, newalloc * itemsize); + newptr = realloc (v->ptr, newcap * itemsize); if (newptr == NULL) return -1; v->ptr = newptr; - v->alloc = newalloc; + v->cap = newcap; return 0; } diff --git a/common/utils/vector.h b/common/utils/vector.h index f6a0af78..782dcba6 100644 --- a/common/utils/vector.h +++ b/common/utils/vector.h @@ -86,7 +86,7 @@ struct name { \ type *ptr; /* Pointer to array of items. */ \ size_t size; /* Number of valid items in the array. */ \ - size_t alloc; /* Number of items allocated. */ \ + size_t cap; /* Maximum number of items. */ \ }; \ typedef struct name name; \ \ @@ -106,7 +106,7 @@ name##_insert (name *v, type elem, size_t i) \ { \ assert (i <= v->size); \ - if (v->size >= v->alloc) { \ + if (v->size >= v->cap) { \ if (name##_reserve (v, 1) == -1) return -1; \ } \ memmove (&v->ptr[i+1], &v->ptr[i], (v->size-i) * sizeof (elem)); \ @@ -137,7 +137,7 @@ { \ free (v->ptr); \ v->ptr = NULL; \ - v->size = v->alloc = 0; \ + v->size = v->cap = 0; \ } \ \ /* Iterate over the vector, calling f() on each element. */ \ @@ -181,17 +181,17 @@ if (newptr == NULL) return -1; \ memcpy (newptr, vptr, len); \ copy->ptr = newptr; \ - copy->size = copy->alloc = v->size; \ + copy->size = copy->cap = v->size; \ return 0; \ } \ \ -#define empty_vector { .ptr = NULL, .size = 0, .alloc = 0 } +#define empty_vector { .ptr = NULL, .size = 0, .cap = 0 } struct generic_vector { void *ptr; size_t size; - size_t alloc; + size_t cap; }; extern int generic_vector_reserve (struct generic_vector *v, diff --git a/plugins/vddk/reexec.c b/plugins/vddk/reexec.c index 46acdb62..9e87025e 100644 --- a/plugins/vddk/reexec.c +++ b/plugins/vddk/reexec.c @@ -116,7 +116,7 @@ perform_reexec (const char *env, const char *prepend) nbdkit_error ("realloc: %m"); exit (EXIT_FAILURE); } - r = read (fd, buf.ptr + buf.size, buf.alloc - buf.size); + r = read (fd, buf.ptr + buf.size, buf.cap - buf.size); if (r == -1) { nbdkit_error ("read: %s: %m", cmdline_file); exit (EXIT_FAILURE); -- 2.31.1