From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:47032) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGEad-0000LP-PT for qemu-devel@nongnu.org; Mon, 24 Sep 2012 15:45:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TGEaX-0007lu-RU for qemu-devel@nongnu.org; Mon, 24 Sep 2012 15:45:11 -0400 Received: from v220110690675601.yourvserver.net ([78.47.199.172]:51328) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGEaX-0007em-I5 for qemu-devel@nongnu.org; Mon, 24 Sep 2012 15:45:05 -0400 Message-ID: <5060B83E.7070500@weilnetz.de> Date: Mon, 24 Sep 2012 21:45:02 +0200 From: Stefan Weil MIME-Version: 1.0 References: <1345664552-2250-1-git-send-email-sw@weilnetz.de> <5060B46F.8060400@redhat.com> In-Reply-To: <5060B46F.8060400@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] w32: Always use standard instead of native format strings List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: Blue Swirl , qemu-devel@nongnu.org Am 24.09.2012 21:28, schrieb Eric Blake: > On 08/22/2012 01:42 PM, Stefan Weil wrote: >> GLib 2.0 include files use __printf__ for the format attribute >> which resolves to native format strings on w32 hosts. >> >> QEMU wants standard format strings instead of native format >> strings, so we simply change any declaration with __printf__ >> to use __gnu_printf__. >> >> This works because all basic printf functions support both >> kinds of format strings. >> >> This fixes a compiler warning: >> >> qapi/string-output-visitor.c: In function =E2=80=98print_type_int=E2=80= =99: >> qapi/string-output-visitor.c:34:5: warning: unknown conversion type ch= aracter =E2=80=98l=E2=80=99 in format [-Wformat] >> qapi/string-output-visitor.c:34:5: warning: too many arguments for for= mat [-Wformat-extra-args] >> >> Signed-off-by: Stefan Weil >> --- >> compiler.h | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/compiler.h b/compiler.h >> index 07ba1f8..c734a71 100644 >> --- a/compiler.h >> +++ b/compiler.h >> @@ -44,6 +44,11 @@ >> /* Use gnu_printf when supported (qemu uses standard format strin= gs). */ >> # define GCC_ATTR __attribute__((__unused__, format(gnu_printf, 1, = 2))) >> # define GCC_FMT_ATTR(n, m) __attribute__((format(gnu_printf, n, m)= )) >> +# if defined(_WIN32) >> + /* Map __printf__ to __gnu_printf__ because we want standard form= at strings >> + * even when MinGW or GLib include files use __printf__. */ >> +# define __printf__ __gnu_printf__ >> +# endif > > Don't you need to make this conditional on the gcc version? That is, > gcc 4.4 added __gnu_printf__, but gcc 4.3 understands only __printf__ > and attempts to pass __gnu_printf__ will cause compilation failure. > It is conditional. The complete code is here: # if !QEMU_GNUC_PREREQ(4, 4) /* gcc versions before 4.4.x don't support gnu_printf, so use printf.= */ # define GCC_ATTR __attribute__((__unused__, format(printf, 1, 2))) # define GCC_FMT_ATTR(n, m) __attribute__((format(printf, n, m))) # else /* Use gnu_printf when supported (qemu uses standard format strings).= */ # define GCC_ATTR __attribute__((__unused__, format(gnu_printf, 1, 2))) # define GCC_FMT_ATTR(n, m) __attribute__((format(gnu_printf, n, m))) # if defined(_WIN32) /* Map __printf__ to __gnu_printf__ because we want standard format=20 strings * even when MinGW or GLib include files use __printf__. */ # define __printf__ __gnu_printf__ # endif # endif gcc 4.3 and older will still produce compiler warnings.