[Mono-devel-list] Non GCC compiler patch - ip_mreq &HP'sheaders

Piers Haken piersh at friskit.com
Fri May 23 03:18:54 EDT 2003


The only time I can think of that an implicit conversion to a ptrdiff_t
would be a problem is with a shortening cast and such a cast on a
pointer type would generally be an error anyway.

The best way to prevent this is to throw -Werror and turn on
pedantic/strict warnings and only disable (#pragma) them when absolutely
necessary. I'm a big fan of -Wall -Werror (or /WX /W4) as along-term
solution to these kinds of problems. Of course, throwing them in the
middle of a project is kind of a pain, but really that's the whole
point.

For win32/64, sizeof(ptrdiff_t) == sizeof(size_t)
However, on win64, sizeof(size_t) != sizeof(long)

MSVC has no 'long long', but you can conditionally typedef unsigned
_int64. In fact, I would suggest doing this in a common header to
prevent refactoring in the future.

Piers.

> -----Original Message-----
> From: Jonathan Pryor [mailto:jonpryor at vt.edu] 
> Sent: Thursday, May 22, 2003 8:21 PM
> To: Piers Haken
> Cc: Bernie Solomon; Dick Porter; Mono Development List
> Subject: RE: [Mono-devel-list] Non GCC compiler patch - 
> ip_mreq &HP'sheaders
> 
> 
> ptrdiff_t would probably work; I had forgotten about that 
> type.  The one potential problem is that it's a signed 
> integer type, which could lead to sign extension problems 
> when performing widening operations, and sign extension would 
> "destroy" the address held by the variable.
> 
> If you're careful and avoid implicit conversions, ptrdiff_t 
> is probably a safe answer.
> 
> Related question: does anybody know of any systems where
> sizeof(ptrdiff_t) != sizeof(size_t)?
> 
> Thanks,
>  - Jon
> 
> On Thu, 2003-05-22 at 19:09, Piers Haken wrote:
> > How about ptrdiff_t?
> > 
> > > -----Original Message-----
> > > From: Jonathan Pryor [mailto:jonpryor at vt.edu]
> > > Sent: Thursday, May 22, 2003 9:52 AM
> > > To: Bernie Solomon
> > > Cc: Dick Porter; Mono Development List
> > > Subject: Re: [Mono-devel-list] Non GCC compiler patch - 
> > > ip_mreq &HP'sheaders
> > > 
> > > 
> > > The C99 type to use for an an int big enough to hold a
> > > pointer is intptr_t and uintptr_t (signed vs. unsigned 
> > > versions) in <stdint.h>
> > > 
> > > However, I'm not sure we can assume C99 support (MSVC doesn't
> > > have <stdint.h> last time I checked).
> > > 
> > > The next best bet is probably size_t.  Long isn't safe, as it
> > > would only be large enough to hold a pointer in an LP64 
> > > model, but Windows will be using a P64 model, so "long" won't 
> > > be portable to Windows (unless using GCC, which would have 
> > > intptr_t...).
> > > 
> > > 'long long' isn't supported by MSVC (and likely other
> > > compilers), so that's not an option either.  Plus, it's 
> > > always 64-bits, so it would be needlessly large on 32-bit 
> platforms.
> > > 
> > > Personally, I'd use intptr_t and provide a "fake" <stdint.h>
> > > for platforms that don't already have it (Windows).  The 
> > > default intptr_t could default to an alias for size_t.  This 
> > > should be safe and fairly future-proof.
> > > 
> > >  - Jon
> > > 
> > > On Thu, 2003-05-22 at 12:17, Bernie Solomon wrote:
> > > > io-layer/daemon-messages.c needs _XOPEN_SOURCE_EXTENDED for
> > > cmsghdr so
> > > > it seems impossible to have this compile and socket-io.c at
> > > the same
> > > > time - but this is the only file that needs it. So an 
> alternative
> > > > which feels slightly less yucky is to have 
> _XOPEN_SOURCE defined 
> > > > everywhere by configure
> > > > 
> > > > #ifdef __hpux // is this the right symbol? or should it be
> > > something
> > > > defined by configure. #define _XOPEN_SOURCE_EXTENDED #endif
> > > > 
> > > > at the top of daemon-messages.c to get cmsghdr.
> > > > 
> > > > BTW - I have seen no answers to my question on the type to
> > > use for an
> > > > int big enough to hold a pointer - is there an official
> > > story on that?
> > > > 
> > > > Bernie Solomon
> > > > ----- Original Message -----
> > > > From: "Dick Porter" <dick at ximian.com>
> > > > To: "Bernie Solomon" <bernard at ugsolutions.com>
> > > > Cc: <mono-devel-list at lists.ximian.com>
> > > > Sent: Thursday, May 22, 2003 8:39 AM
> > > > Subject: Re: [Mono-devel-list] Non GCC compiler patch - 
> ip_mreq & 
> > > > HP'sheaders
> > > > 
> > > > 
> > > > > On Wed, 2003-05-21 at 22:46, Bernie Solomon wrote:
> > > > > > I looked at this a little more. So far the best I 
> have come up
> > > > > > with is
> > > > have
> > > > > > _XOPEN_SOURCE_EXTENDED defined for all compiles as it
> > > is needed in
> > > > > > other files and in socket-io.c have something like:
> > > > > >
> > > > > > #ifdef __hpux // or some equivalent
> > > > > > #undef _XOPEN_SOURCE_EXTENDED
> > > > > > #define _XOPEN_SOURCE
> > > > > > #endif
> > > > > >
> > > > > > before the appropriate includes so that ip_mreq comes
> > > out (it is
> > > > > > under
> > > > an
> > > > > > ifndef _XOPEN_SOURCE_EXTENDED in
> > > /usr/include/netinet/in.h). Ugly
> > > > > > but at least the code is compiled in this way.
> > > > >
> > > > > Yuck.
> > > > >
> > > > > Do you know offhand which other places require the
> > > _EXTENDED define?
> > > > > Is it possible to have configure.in give a set of
> > > preprocessor flags
> > > > > that do the right thing for hpux everywhere?  If not then
> > > we'll just
> > > > > have to live with that workaround in socket-io.c.
> > > > >
> > > > > Apart from this struct ip_mreq business, the changes to 
> > > > > io-layer,
> > > > > monitor.c and process.c look fine to me.  The other 
> changes will 
> > > > > have to be reviewed by the owners of those bits of code.
> > > > >
> > > > > - Dick
> > > > >
> > > > >
> > > > 
> > > > _______________________________________________
> > > > Mono-devel-list mailing list Mono-devel-list at lists.ximian.com
> > > > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> > > 
> > > _______________________________________________
> > > Mono-devel-list mailing list Mono-devel-list at lists.ximian.com
> > > http://lists.ximian.com/mailman/listinfo/mono-> devel-list
> > > 
> > _______________________________________________
> > Mono-devel-list mailing list
> > Mono-devel-list at lists.ximian.com 
> > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> 
> 



More information about the Mono-devel-list mailing list