diff options
author | Gianni Tedesco <gianni.tedesco@citrix.com> | 2011-01-07 18:53:50 +0000 |
---|---|---|
committer | Gianni Tedesco <gianni.tedesco@citrix.com> | 2011-01-07 18:53:50 +0000 |
commit | c65422a6c4fdff1e47ea55e7701b53208c3bc429 (patch) | |
tree | 60e6f2170e1e760e94015b61e189c20aa0e0b169 /tools/libxl/flexarray.c | |
parent | 984599eab771290c537a7efb761c01accd97f1fc (diff) | |
download | xen-c65422a6c4fdff1e47ea55e7701b53208c3bc429.tar.gz xen-c65422a6c4fdff1e47ea55e7701b53208c3bc429.tar.bz2 xen-c65422a6c4fdff1e47ea55e7701b53208c3bc429.zip |
xl: Implement flexarray_append() and flexarray_vappend()
Makes a lot of code simpler and nicer and saves a fair amount of screen
real-estate
Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/flexarray.c')
-rw-r--r-- | tools/libxl/flexarray.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/libxl/flexarray.c b/tools/libxl/flexarray.c index bc7ad82e4c..724eabd52f 100644 --- a/tools/libxl/flexarray.c +++ b/tools/libxl/flexarray.c @@ -14,6 +14,7 @@ */ #include "libxl_internal.h" +#include <stdarg.h> flexarray_t *flexarray_make(int size, int autogrow) { @@ -21,6 +22,7 @@ flexarray_t *flexarray_make(int size, int autogrow) if (array) { array->size = size; array->autogrow = autogrow; + array->count = 0; array->data = calloc(size, sizeof(void *)); } return array; @@ -56,10 +58,32 @@ int flexarray_set(flexarray_t *array, unsigned int index, void *ptr) if (flexarray_grow(array, newsize - array->size)) return 2; } + if ( index + 1 > array->count ) + array->count = index + 1; array->data[index] = ptr; return 0; } +int flexarray_append(flexarray_t *array, void *ptr) +{ + return flexarray_set(array, array->count, ptr); +} + +int flexarray_vappend(flexarray_t *array, ...) +{ + va_list va; + void *ptr; + int ret; + + va_start(va, array); + for(ret = 0; (ptr = va_arg(va, void *)); ret++) { + if ( flexarray_append(array, ptr) ) + break; + } + va_end(va); + return ret; +} + int flexarray_get(flexarray_t *array, int index, void **ptr) { if (index >= array->size) |