[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] ssize_t: fix definition on mingw
From: |
Eric Blake |
Subject: |
Re: [PATCH] ssize_t: fix definition on mingw |
Date: |
Thu, 05 Apr 2012 06:07:20 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 |
On 04/05/2012 04:10 AM, Bruno Haible wrote:
> This patch will not help to fix Daniel Berrange's problem. In mingw
> and mingw64, ssize_t is defined by <sys/types.h>, and gnulib will not
> override it.
>
> Test program:
> ==================== foo.c =================
> #include <sys/types.h>
> size_t a;
> ssize_t b;
> ============================================
>
> With mingw of 2009:
>
> $ gcc -mno-cygwin -c foo.c
> $ gcc -mno-cygwin -E foo.c | grep size_t
> typedef unsigned int size_t;
> typedef long _ssize_t;
> typedef _ssize_t ssize_t;
> size_t a;
> ssize_t b;
Broken, but a thing of the past.
>
> With mingw of 2011:
>
> $ i686-pc-mingw32-gcc -c foo.c
> $ i686-pc-mingw32-gcc -E foo.c | grep size_t
> typedef unsigned int size_t;
> typedef int _ssize_t;
> typedef _ssize_t ssize_t;
> size_t a;
> ssize_t b;
Working.
>
> With mingw64 of 2011:
>
> $ i686-w64-mingw32-gcc -c foo.c
> $ i686-w64-mingw32-gcc -E foo.c | grep size_t
> typedef unsigned int size_t;
> typedef int ssize_t;
> size_t a;
> ssize_t b;
Working.
You forgot to check one (64-bit mingw64):
$ x86_64-w64-mingw32-gcc -E foo.c | grep size_t
__extension__ typedef unsigned long long size_t;
__extension__ typedef long long ssize_t;
size_t a;
ssize_t b;
but apparently that is also working. Then how do I explain the compiler
warning that Daniel was seeing under mingw64? Daniel, were you testing
with x86_64-w64-mingw32-gcc or i686-w64-mingw32-gcc? Can you come up
with a minimal test case that shows the issue you had?
>
> You cannot look at size_t to determine what ssize_t should be: On MSVC 9,
> <sys/types.h> lacks both size_t and ssize_t.
In which case we are okay as long as we choose the same size for each.
>
> In summary, I would not do something about it in gnulib. The proper place
> for setting up size_t and ssize_t are GCC and <sys/types.h>. If gnulib
> would override the definition, it would have side effects on C++ overloading.
> For my feeling, that's not worth it. Simply ignore the GCC printf argument
> size warnings on mingw. Look at them only on glibc systems.
But my problem is that there _shouldn't_ be any GCC printf warnings on
mingw, if mingw headers are correct.
--
Eric Blake address@hidden +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature