From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:53179) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RKwAc-0004IR-UR for qemu-devel@nongnu.org; Mon, 31 Oct 2011 14:01:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RKwAY-000424-M8 for qemu-devel@nongnu.org; Mon, 31 Oct 2011 14:01:14 -0400 Received: from e36.co.us.ibm.com ([32.97.110.154]:49770) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RKwAY-00041h-Es for qemu-devel@nongnu.org; Mon, 31 Oct 2011 14:01:10 -0400 Received: from /spool/local by e36.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 31 Oct 2011 12:01:04 -0600 Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p9VHxri2138654 for ; Mon, 31 Oct 2011 12:00:01 -0600 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p9VHxqoU024151 for ; Mon, 31 Oct 2011 11:59:52 -0600 From: "Aneesh Kumar K.V" In-Reply-To: <1320061773-10634-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1320061773-10634-1-git-send-email-stefanha@linux.vnet.ibm.com> Date: Mon, 31 Oct 2011 23:28:45 +0530 Message-ID: <87mxchgi0a.fsf@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH] hw/9pfs: use g_vasprintf() instead of rolling our own List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Markus Armbruster On Mon, 31 Oct 2011 11:49:33 +0000, Stefan Hajnoczi wrote: > Markus Armbruster sent fixes for va_list vararg > issues in v9fs_string_alloc_printf(). It turns out the function > duplicates g_vasprintf() and can therefore be eliminated entirely. > > Signed-off-by: Stefan Hajnoczi Reviewed-by: Aneesh Kumar K.V > --- > hw/9pfs/virtio-9p.c | 103 ++------------------------------------------------- > 1 files changed, 4 insertions(+), 99 deletions(-) > > diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c > index 8b6813f..253919b 100644 > --- a/hw/9pfs/virtio-9p.c > +++ b/hw/9pfs/virtio-9p.c > @@ -11,6 +11,9 @@ > * > */ > > +#include > +#include > + > #include "hw/virtio.h" > #include "hw/pc.h" > #include "qemu_socket.h" > @@ -161,114 +164,16 @@ void v9fs_string_null(V9fsString *str) > v9fs_string_free(str); > } > > -static int number_to_string(void *arg, char type) > -{ > - unsigned int ret = 0; > - > - switch (type) { > - case 'u': { > - unsigned int num = *(unsigned int *)arg; > - > - do { > - ret++; > - num = num/10; > - } while (num); > - break; > - } > - case 'U': { > - unsigned long num = *(unsigned long *)arg; > - do { > - ret++; > - num = num/10; > - } while (num); > - break; > - } > - default: > - printf("Number_to_string: Unknown number format\n"); > - return -1; > - } > - > - return ret; > -} > - > -static int GCC_FMT_ATTR(2, 0) > -v9fs_string_alloc_printf(char **strp, const char *fmt, va_list ap) > -{ > - va_list ap2; > - char *iter = (char *)fmt; > - int len = 0; > - int nr_args = 0; > - char *arg_char_ptr; > - unsigned int arg_uint; > - unsigned long arg_ulong; > - > - /* Find the number of %'s that denotes an argument */ > - for (iter = strstr(iter, "%"); iter; iter = strstr(iter, "%")) { > - nr_args++; > - iter++; > - } > - > - len = strlen(fmt) - 2*nr_args; > - > - if (!nr_args) { > - goto alloc_print; > - } > - > - va_copy(ap2, ap); > - > - iter = (char *)fmt; > - > - /* Now parse the format string */ > - for (iter = strstr(iter, "%"); iter; iter = strstr(iter, "%")) { > - iter++; > - switch (*iter) { > - case 'u': > - arg_uint = va_arg(ap2, unsigned int); > - len += number_to_string((void *)&arg_uint, 'u'); > - break; > - case 'l': > - if (*++iter == 'u') { > - arg_ulong = va_arg(ap2, unsigned long); > - len += number_to_string((void *)&arg_ulong, 'U'); > - } else { > - return -1; > - } > - break; > - case 's': > - arg_char_ptr = va_arg(ap2, char *); > - len += strlen(arg_char_ptr); > - break; > - case 'c': > - len += 1; > - break; > - default: > - fprintf(stderr, > - "v9fs_string_alloc_printf:Incorrect format %c", *iter); > - return -1; > - } > - iter++; > - } > - > -alloc_print: > - *strp = g_malloc((len + 1) * sizeof(**strp)); > - > - return vsprintf(*strp, fmt, ap); > -} > - > void GCC_FMT_ATTR(2, 3) > v9fs_string_sprintf(V9fsString *str, const char *fmt, ...) > { > va_list ap; > - int err; > > v9fs_string_free(str); > > va_start(ap, fmt); > - err = v9fs_string_alloc_printf(&str->data, fmt, ap); > - BUG_ON(err == -1); > + str->size = g_vasprintf(&str->data, fmt, ap); > va_end(ap); > - > - str->size = err; > } > > void v9fs_string_copy(V9fsString *lhs, V9fsString *rhs) > -- > 1.7.7 >