This is the mail archive of the newlib@sourceware.org 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


On Feb 20 16:08, Ralf Corsepius wrote:
> On 02/20/2013 03:14 PM, Corinna Vinschen wrote:
> >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
> >#endif
> >
> >
> >Does that make sense?
> 
> GCC requires exact symmetry of types between ssize_t and size_t.
> I.e. checking for sizes of types is not sufficient for [s]size_t.

Do you have a code suggestion then?  GCC doesn't define ssize_t
by itself, nor in stddef.h except for BeOS.  And the only predefines
helping us are

  #define __SIZE_MAX__ 18446744073709551615UL
  #define __SIZEOF_INT__ 4
  #define __SIZEOF_LONG__ 8
  #define __SIZEOF_SIZE_T__ 8
  #define __SIZE_TYPE__ long unsigned int
  #define __SIZEOF_LONG_LONG__ 8


Corinna

-- 
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]