aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/flexarray.c
diff options
context:
space:
mode:
authorGianni Tedesco <gianni.tedesco@citrix.com>2011-01-07 18:53:50 +0000
committerGianni Tedesco <gianni.tedesco@citrix.com>2011-01-07 18:53:50 +0000
commitc65422a6c4fdff1e47ea55e7701b53208c3bc429 (patch)
tree60e6f2170e1e760e94015b61e189c20aa0e0b169 /tools/libxl/flexarray.c
parent984599eab771290c537a7efb761c01accd97f1fc (diff)
downloadxen-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.c24
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)