This is the mail archive of the mailing list for the newlib project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 64bit] ssize_t

Hi Yaakov,

On Feb 20 03:23, Yaakov (Cygwin/X) wrote:
> I just discovered an issue resulting from this commit:
> 2002-06-27  Jeff Johnston  <jjohnstn@...>
>         * libc/include/sys/_types.h: Define _ssize_t as int if int is
>         32-bits, otherwise define it as long.
> On x86_64-cygwin (as on Linux), int is still 32 bits, but size_t is a
> 64bit unsigned long and ssize_t should be as large but signed.
> Possible patch for newlib attached; corresponding patches for
> cygwin-64bit-branch on cygwin-patches@.

Thanks for the patch.  I'm just wondering if ssize_t shouldn't ideally
be based on size_t, at least when using GCC.  GCC has a predefined
__SIZEOF_SIZE_T__ macro.

What I'm thinking of is something like

#ifndef __ssize_t_defined
# ifdef __SIZEOF_SIZE_T__
#  if defined (__SIZEOF_INT__) && __SIZEOF_SIZE_T__ == __SIZEOF_INT__
typedef int ssize_t;
#  else
typedef long ssize_t
#  endif
# elif defined(__INT_MAX__) && defined(__LONG_MAX__) && __LONG_MAX__ == __INT_MAX__
typedef int _ssize_t;
# else
typedef long _ssize_t;
# endif

Does that make sense?


Corinna Vinschen
Cygwin Maintainer
Red Hat

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]