[PATCH] Fix 32-bit SSIZE_MAX
Corinna Vinschen
corinna-cygwin@cygwin.com
Thu Jul 14 15:09:00 GMT 2016
On Jul 13 15:02, Eric Blake wrote:
> POSIX requires that SSIZE_MAX have the same type as ssize_t, but
> on 32-bit, we were defining it as a long even though ssize_t
> resolves to an int. It also requires that SSIZE_MAX be usable
> via preprocessor #if, so we can't cheat and use a cast.
>
> If this were newlib, I'd have had to hack _intsup.h to probe the
> qualities of size_t (via gcc's __SIZE_TYPE__), similar to how we
> already probe the qualities of int8_t and friends, then cross our
> fingers that ssize_t happens to have the same rank (most systems
> do, but POSIX permits a system where they differ such as size_t
> being long while ssize_t is int). Unfortunately gcc gives us
> neither __SSIZE_TYPE__ nor __SSIZE_MAX__. On the other hand, our
> limits.h is specific to cygwin, we can just shortcut to the
> correct results rather than being generic to all possible ABI.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
> ---
> winsup/cygwin/include/limits.h | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/winsup/cygwin/include/limits.h b/winsup/cygwin/include/limits.h
> index 2083e3e..cf3c8d0 100644
> --- a/winsup/cygwin/include/limits.h
> +++ b/winsup/cygwin/include/limits.h
> @@ -128,9 +128,17 @@ details. */
> #undef ULLONG_MAX
> #define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
>
> -/* Maximum size of ssize_t */
> +/* Maximum size of ssize_t. Sadly, gcc doesn't give us __SSIZE_MAX__
> + the way it does for __SIZE_MAX__. On the other hand, we happen to
> + know that for Cygwin, ssize_t is 'int' on 32-bit and 'long' on
> + 64-bit, and this particular header is specific to Cygwin, so we
> + don't have to jump through hoops. */
> #undef SSIZE_MAX
> +#if __WORDSIZE == 64
> #define SSIZE_MAX (__LONG_MAX__)
> +#else
> +#define SSIZE_MAX (__INT_MAX__)
> +#endif
>
>
> /* Runtime Invariant Values */
Looks good, please apply.
Thanks,
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20160714/b411dd16/attachment.sig>
More information about the Cygwin-patches
mailing list