
Morning Saori, You need to call the error function for each error condition, eg: if (mapstr == NULL) { xenXMError (domain ? domain->conn : NULL, VIR_ERR_NO_MEMORY, __FUNCTION__); return -1; } (Much of the current libvirt code gets this wrong, and it's a great deal of pain caused by virterror, but there's no sensible way to change things from here.) The inner loop is still quadratic even with snprintf because you're copying the string each time. I've changed it below to use a virBuffer instead. If you ./configure --enable-compile-warnings=error then any warnings will turn into errors. There was one warning in the patch you sent. Modified version of the patch is attached. **NOTE** I've only compiled it, because I don't have any suitable machine to test it on. Rich. PS. Even using the supposedly simplified virBuffer, this is still a good example of why we should not be writing any more code in C. It's not 1985 any more. The language should take care of garbage collection, typing, strings, structures, error handling, etc. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903