Hi, Daniel
I can't help thinking this method
would be better off using the dyn allocated virBuffer* routines instead
of a static string & snprintf.
Oops, sorry,
virBuffer* routines had entirely slipped my mind.
Buffer is allocated dynamically when I use this.
therefore, I make the patch which virBuffer* routines is in.
Thanks,
Shigeki Sakamoto.
Index: src/internal.h
===================================================================
RCS file: /data/cvs/libvirt/src/internal.h,v
retrieving revision 1.38
diff -u -p -r1.38 internal.h
--- src/internal.h 23 Apr 2007 07:41:23 -0000 1.38
+++ src/internal.h 24 Apr 2007 11:00:50 -0000
@@ -106,11 +106,6 @@ extern "C" {
#define VIR_CONNECT_RO 1
/**
- * buffer size for definition file
- */
-#define VIR_XML_STRING_BUFLEN (1024 + PATH_MAX * 16 + FILENAME_MAX * 16)
-
-/**
* _virConnect:
*
* Internal structure associated to a connection
Index: src/xend_internal.c
===================================================================
RCS file: /data/cvs/libvirt/src/xend_internal.c,v
retrieving revision 1.110
diff -u -p -r1.110 xend_internal.c
--- src/xend_internal.c 23 Apr 2007 07:41:23 -0000 1.110
+++ src/xend_internal.c 24 Apr 2007 11:00:55 -0000
@@ -587,24 +587,33 @@ static int
xend_op_ext2(virConnectPtr xend, const char *path, char *error,
size_t n_error, const char *key, va_list ap)
{
- char ops[VIR_XML_STRING_BUFLEN];
const char *k = key, *v;
- int offset = 0;
+ virBuffer buf;
+ int ret;
+
+ buf.content = malloc(1000);
+ if (buf.content == NULL)
+ return -1;
+ buf.size = 1000;
+ buf.use = 0;
while (k) {
v = va_arg(ap, const char *);
- offset += snprintf(ops + offset, sizeof(ops) - offset, "%s", k);
- offset += snprintf(ops + offset, sizeof(ops) - offset, "%s",
"=");
- offset += snprintf(ops + offset, sizeof(ops) - offset, "%s", v);
+ virBufferVSprintf(&buf, "%s", k);
+ virBufferVSprintf(&buf, "%s", "=");
+ virBufferVSprintf(&buf, "%s", v);
k = va_arg(ap, const char *);
if (k)
- offset += snprintf(ops + offset,
- sizeof(ops) - offset, "%s", "&");
+ virBufferVSprintf(&buf, "%s", "&");
}
- return http2unix(xend, xend_post(xend, path, ops, error, n_error));
+ ret = http2unix(xend, xend_post(xend, path, buf.content, error, n_error));
+ if (buf.content != NULL)
+ free(buf.content);
+
+ return ret;
}