This is the mail archive of the cygwin-patches mailing list for the Cygwin 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] Cygwin: define byteswap.h inlines as macros


On Mar 15 11:55, VÃclav Haisman wrote:
> On 15 March 2016 at 04:13, Yaakov Selkowitz <yselkowi@redhat.com> wrote:
> > The bswap_* "functions" are macros in glibc, so they may be tested for
> > by the preprocessor (e.g. #ifdef bswap_16).
> >
> > Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
> > ---
> >  winsup/cygwin/include/byteswap.h | 14 +++++++++-----
> >  1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/winsup/cygwin/include/byteswap.h b/winsup/cygwin/include/byteswap.h
> > index cd5a726..9f73c5a 100644
> > --- a/winsup/cygwin/include/byteswap.h
> > +++ b/winsup/cygwin/include/byteswap.h
> > @@ -16,23 +16,27 @@ extern "C" {
> >  #endif
> >
> >  static __inline unsigned short
> > -bswap_16 (unsigned short __x)
> > +__bswap_16 (unsigned short __x)
> >  {
> >    return (__x >> 8) | (__x << 8);
> >  }
> >
> >  static __inline unsigned int
> > -bswap_32 (unsigned int __x)
> > +__bswap_32 (unsigned int __x)
> >  {
> > -  return (bswap_16 (__x & 0xffff) << 16) | (bswap_16 (__x >> 16));
> > +  return (__bswap_16 (__x & 0xffff) << 16) | (__bswap_16 (__x >> 16));
> >  }
> >
> >  static __inline unsigned long long
> > -bswap_64 (unsigned long long __x)
> > +__bswap_64 (unsigned long long __x)
> >  {
> > -  return (((unsigned long long) bswap_32 (__x & 0xffffffffull)) << 32) | (bswap_32 (__x >> 32));
> > +  return (((unsigned long long) __bswap_32 (__x & 0xffffffffull)) << 32) | (__bswap_32 (__x >> 32));
> >  }
> >
> > +#define bswap_16(x) __bswap_16(x)
> > +#define bswap_32(x) __bswap_32(x)
> > +#define bswap_64(x) __bswap_64(x)
> > +
> >  #ifdef __cplusplus
> >  }
> >  #endif
> > --
> > 2.7.0
> >
> 
> Would it not be better to leave the original functions as they were
> and simply use these defines?
> 
> #define bswap_16 bswap_16
> #define bswap_32 bswap_32
> #define bswap_64 bswap_64
> 
> I believe this is valid C and C++. Untested.

Yes, that would work.  Glibc defines the inlined functions with leading
underscores as well, though.  Maybe we should do the same because some
strange application wants to use the underscored versions?


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Attachment: signature.asc
Description: PGP signature


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