Displaying 20 results from an estimated 51 matches for "empty_vector".
2023 Mar 28
1
[nbdkit PATCH 1/2] common/utils: document empty_vector compound literal assignment
We usually zero-initialize vectors like
string_vector names = empty_vector;
Allocating and zeroing separately is frequently useful however. Document
the pattern
string_vector names;
names = (string_vector)empty_vector;
where "(string_vector)empty_vector" is a compound literal.
Link: http://mid.mail-archive.com/20230221183810.vjilfbmj3woqivlj at redhat.co...
2023 Mar 28
3
[nbdkit PATCH 0/2] various
I originally meant to post only the "vector.h" patch, but then
(independently) nbdkit wouldn't build. Hence the other (rust plugin)
patch.
Laszlo
Laszlo Ersek (2):
common/utils: document empty_vector compound literal assignment
plugins/rust: restrict predicates-{tree,core} to {1.0.7,1.0.5}
common/utils/vector.h | 8 +++++++-
plugins/rust/Cargo.toml | 2 ++
2 files changed, 9 insertions(+), 1 deletion(-)
base-commit: 45b72f5bd8fc1b475fa130d06c86cd877bf595d5
2023 Aug 30
2
[nbdkit PATCH] sh: Allow pwrite to not consume all data
..."in the script",
- argv0);
+ *pipe_full = true;
+ r = wbuflen;
}
else
nbdkit_error ("%s: write: %m", argv0);
@@ -555,7 +550,7 @@ call (const char **argv)
CLEANUP_FREE_STRING string rbuf = empty_vector;
CLEANUP_FREE_STRING string ebuf = empty_vector;
- r = call3 (NULL, 0, &rbuf, &ebuf, argv);
+ r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
return handle_script_error (argv[0], &ebuf, r);
}
@@ -568,7 +563,7 @@ call_read (string *rbuf, const char **argv)
int r;...
2023 Aug 31
1
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...uot;,
> - argv0);
> + *pipe_full = true;
> + r = wbuflen;
> }
> else
> nbdkit_error ("%s: write: %m", argv0);
> @@ -555,7 +550,7 @@ call (const char **argv)
> CLEANUP_FREE_STRING string rbuf = empty_vector;
> CLEANUP_FREE_STRING string ebuf = empty_vector;
>
> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
> return handle_script_error (argv[0], &ebuf, r);
> }
>
> @@ -568,7 +563,7 @@ call_read (string...
2023 Aug 31
1
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...uot;,
> - argv0);
> + *pipe_full = true;
> + r = wbuflen;
> }
> else
> nbdkit_error ("%s: write: %m", argv0);
> @@ -555,7 +550,7 @@ call (const char **argv)
> CLEANUP_FREE_STRING string rbuf = empty_vector;
> CLEANUP_FREE_STRING string ebuf = empty_vector;
>
> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
> return handle_script_error (argv[0], &ebuf, r);
> }
>
> @@ -568,7 +563,7 @@ call_read (string...
2023 Aug 31
1
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...argv0);
> > + *pipe_full = true;
> > + r = wbuflen;
> > }
> > else
> > nbdkit_error ("%s: write: %m", argv0);
> > @@ -555,7 +550,7 @@ call (const char **argv)
> > CLEANUP_FREE_STRING string rbuf = empty_vector;
> > CLEANUP_FREE_STRING string ebuf = empty_vector;
> >
> > - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
> > + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
> > return handle_script_error (argv[0], &ebuf, r);
> > }
> >
> &g...
2023 Aug 31
2
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...argv0);
>> + *pipe_full = true;
>> + r = wbuflen;
>> }
>> else
>> nbdkit_error ("%s: write: %m", argv0);
>> @@ -555,7 +550,7 @@ call (const char **argv)
>> CLEANUP_FREE_STRING string rbuf = empty_vector;
>> CLEANUP_FREE_STRING string ebuf = empty_vector;
>>
>> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
>> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
>> return handle_script_error (argv[0], &ebuf, r);
>> }
>>
>> @@ -568...
2023 Aug 31
2
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...*pipe_full = true;
> >> + r = wbuflen;
> >> }
> >> else
> >> nbdkit_error ("%s: write: %m", argv0);
> >> @@ -555,7 +550,7 @@ call (const char **argv)
> >> CLEANUP_FREE_STRING string rbuf = empty_vector;
> >> CLEANUP_FREE_STRING string ebuf = empty_vector;
> >>
> >> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
> >> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
> >> return handle_script_error (argv[0], &ebuf, r);
> >>...
2023 Aug 31
1
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...+ *pipe_full = true;
>>> + r = wbuflen;
>>> }
>>> else
>>> nbdkit_error ("%s: write: %m", argv0);
>>> @@ -555,7 +550,7 @@ call (const char **argv)
>>> CLEANUP_FREE_STRING string rbuf = empty_vector;
>>> CLEANUP_FREE_STRING string ebuf = empty_vector;
>>>
>>> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
>>> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
>>> return handle_script_error (argv[0], &ebuf, r);
>>> }
&...
2023 Aug 31
0
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...r = wbuflen;
> >>>> }
> >>>> else
> >>>> nbdkit_error ("%s: write: %m", argv0);
> >>>> @@ -555,7 +550,7 @@ call (const char **argv)
> >>>> CLEANUP_FREE_STRING string rbuf = empty_vector;
> >>>> CLEANUP_FREE_STRING string ebuf = empty_vector;
> >>>>
> >>>> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
> >>>> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
> >>>> return handle_script_err...
2023 Aug 31
1
[nbdkit PATCH] sh: Allow pwrite to not consume all data
...> >>> + r = wbuflen;
> >>> }
> >>> else
> >>> nbdkit_error ("%s: write: %m", argv0);
> >>> @@ -555,7 +550,7 @@ call (const char **argv)
> >>> CLEANUP_FREE_STRING string rbuf = empty_vector;
> >>> CLEANUP_FREE_STRING string ebuf = empty_vector;
> >>>
> >>> - r = call3 (NULL, 0, &rbuf, &ebuf, argv);
> >>> + r = call3 (NULL, 0, NULL, &rbuf, &ebuf, argv);
> >>> return handle_script_error (argv[0], &eb...
2020 Apr 15
0
[PATCH nbdkit 1/9] common: Add a generic implementation of vectors.
...gt;
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+
+#include "vector.h"
+
+DEFINE_VECTOR_TYPE(int64_vector, int64_t);
+DEFINE_VECTOR_TYPE(string_vector, char *);
+
+static void
+test_int64_vector (void)
+{
+ int64_vector v = empty_vector;
+ size_t i;
+
+ for (i = 0; i < 10; ++i)
+ assert (int64_vector_append (&v, i) == 0);
+ for (i = 0; i < 10; ++i)
+ assert (v.ptr[i] == i);
+ free (v.ptr);
+}
+
+static void
+test_string_vector (void)
+{
+ string_vector v = empty_vector;
+ size_t i;
+
+ for (i = 0; i < 10;...
2020 Jun 02
0
[PATCH nbdkit 3/5] vddk: Miscellaneous improvements to reexec code.
...tor (string_vector *v)
static void
perform_reexec (const char *env, const char *prepend)
{
+ static const char cmdline_file[] = "/proc/self/cmdline";
+ static const char exe_file[] = "/proc/self/exe";
CLEANUP_FREE char *library = NULL;
+ CLEANUP_FREE_BUFFER buffer buf = empty_vector;
CLEANUP_FREE_STRING_VECTOR string_vector argv = empty_vector;
int fd;
- size_t len = 0, buflen = 512;
- CLEANUP_FREE char *buf = NULL;
+ size_t len;
/* In order to re-exec, we need our original command line. The
* Linux kernel does not make it easy to know in advance how large
@...
2020 Oct 27
6
[PATCH libnbd 0/5] info: --map: Coalesce adjacent extents of the same type.
This adds coalescing of adjacent extents of the same type, as
mentioned by Eric Blake in the commit message here:
https://github.com/libguestfs/libnbd/commit/46072f6611f80245846a445766da071e457b00cd
The patch series is rather long because it detours through adding the
<vector.h> library from nbdkit into libnbd and replacing ad hoc uses
of realloc, char ** etc in various places.
Rich.
2020 Oct 27
0
[PATCH libnbd 1/5] common/utils: Copy simple vector library from nbdkit.
...es a new type called ‘name’ containing an
+ * extensible vector of ‘type’ elements. For example:
+ *
+ * DEFINE_VECTOR_TYPE(string_vector, char *)
+ *
+ * defines a new type called ‘string_vector’ as a vector of ‘char *’.
+ * You can create variables of this type:
+ *
+ * string_vector names = empty_vector;
+ *
+ * where ‘names.ptr[]’ will be an array of strings and ‘names.size’
+ * will be the number of strings. There are no get/set accessors. To
+ * iterate over the strings you can use the ‘.ptr’ field directly:
+ *
+ * for (size_t i = 0; i < names.size; ++i)
+ * printf ("%s\n"...
2020 Apr 15
1
Re: [PATCH nbdkit 1/9] common: Add a generic implementation of vectors.
...> + for (i = 0; i < v->size; ++i) \
> + f (v->ptr[i]); \
> + }
Should we allow the callback to return a value, where returning 0 can
abort the iteration early?
> +
> +#define empty_vector { .ptr = NULL, .size = 0, .alloc = 0 }
Nice that this initializer is type-agnostic.
> +
> +struct generic_vector {
> + void *ptr;
> + size_t size;
> + size_t alloc;
> +};
> +
> +static int
> +generic_vector_extend (struct generic_vector *v, size_t n, size_t itemsize)...
2020 Apr 15
0
[PATCH nbdkit 2/9] floppy, iso, split, ssh: Use new vector type to store lists of strings.
...-43,10 +43,11 @@
#include "cleanup.h"
#include "utils.h"
+#include "vector.h"
/* List of directories parsed from the command line. */
-static char **dirs = NULL;
-static size_t nr_dirs = 0;
+DEFINE_VECTOR_TYPE(string_vector, char *);
+static string_vector dirs = empty_vector;
/* genisoimage or mkisofs program, picked at compile time, but can be
* overridden at run time.
@@ -98,9 +99,9 @@ make_iso (void)
fprintf (fp, " -quiet");
if (params)
fprintf (fp, " %s", params);
- for (i = 0; i < nr_dirs; ++i) {
+ for (i = 0; i < dirs.s...
2020 Apr 15
18
[PATCH nbdkit 0/9] Generic vector, and pass $nbdkit_stdio_safe to shell scripts.
This was a rather longer trip around the houses than I anticipated!
The basic purpose of the patch series is to set $nbdkit_stdio_safe to
"0" or "1" in sh and eval plugin scripts.
To do that, I ended up adding a nicer way to manipulate environ lists,
and to do that, I ended up adding a whole generic vector
implementation which is applicable in a lot of different places.
2023 Feb 22
1
[PATCH nbdkit] curl: Try to share as much as possible between handles in the pool
...b
+ */
+static pthread_rwlock_t lockarray[CURL_LOCK_DATA_LAST];
+
+/* Curl share data. */
+static CURLSH *share;
/* This lock protects access to the curl_handles vector below. */
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
@@ -90,18 +103,46 @@ static curl_handle_list curl_handles = empty_vector;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
static size_t in_use = 0, waiting = 0;
-/* Close and free all handles in the pool. */
+/* Initialize pool structures. */
void
-free_all_handles (void)
+load_pool (void)
{
size_t i;
+ for (i = 0; i < ARRAY_SIZE (lockarray); ++i)...
2020 Jul 07
0
[nbdkit PATCH 1/3] vector: Add VECT_remove
...mon/utils/test-vector.c
@@ -43,19 +43,43 @@
DEFINE_VECTOR_TYPE(int64_vector, int64_t);
DEFINE_VECTOR_TYPE(string_vector, char *);
+static int
+compare (const int64_t *a, const int64_t *b)
+{
+ return (*a > *b) - (*a < *b);
+}
+
static void
test_int64_vector (void)
{
int64_vector v = empty_vector;
size_t i;
int r;
+ int64_t tmp, *p;
for (i = 0; i < 10; ++i) {
- r = int64_vector_append (&v, i);
+ r = int64_vector_insert (&v, i, 0);
assert (r == 0);
}
+
+ for (i = 0; i < 10; ++i)
+ assert (v.ptr[i] == 9 - i);
+ int64_vector_sort (&v, compare);...