Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Oct 2000 11:46:35 -0700
From:      Brian Somers <brian@Awfulhak.org>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        Brian Somers <brian@Awfulhak.org>, kargl@apl.washington.edu, freebsd-current@FreeBSD.ORG, brian@Awfulhak.org
Subject:   Re: more endian.h breakage; patch included. 
Message-ID:  <200010181846.e9IIkZY00872@hak.lan.Awfulhak.org>
In-Reply-To: Message from Bruce Evans <bde@zeta.org.au>  of "Mon, 16 Oct 2000 19:44:33 %2B1100." <Pine.BSF.4.21.0010161936340.2691-100000@besplex.bde.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
> On Mon, 16 Oct 2000, Brian Somers wrote:
> 
> > > On Sun, 15 Oct 2000, Steven G. Kargl wrote:
> > > 
> > > > There is another patch needed in libdialog.
> > > 
> > > No patches are needed in applications; endian.h should be unbroken.
> > 
> > In what way ?
> 
> endian.h shouldn't depend on <sys/types.h> or include <sys/types.h> and
> its associated namespace pollution.  It never did before.
> 
> > ntohl() & ntonl() were previously wrong to return u_long.
> 
> Not wrong.  They have always been documented to return u_long.

But if sizeof(u_long) != 4, this is wrong.

> > They now return uint32_t (which requires sys/types.h).
> 
> In NetBSD and in FreeBSD for all arches except i386's they return 
> in_addr_t which happens to be u_int32_t.

For all these arches, machine/endian.h also includes sys/types.h :-(

> > They *could* be changed to return u_int32_t, but this doesn't seem to 
> > be the best way forward.
> 
> I agree that it's not the best way forward, but u_int32_t is traditional
> namespace pollution in <sys/types.h>, so using it is safer than using
> uint32_t.
> 
> > They *could* be changed to return unsigned, but I think this is worse 
> > than u_int32_t.
> 
> It is no different for an arch where unsigned is u_int32_t (both conflict
> with the man page :-).

Except that (IMHO) it shouldn't be documented as a non-numbered-type. 
I would have thought that you'd be the first to agree with this - 
you're the only person I know of that has exotic type sizes :-)

> Bruce

I think the best way forward is to prototype things in terms of 
in_addr_t and in_port_t and to leave them as inlines for __GNUC__ 
(I don't know where other compilers are supposed to get this 
functionality).

I think we should *not* include sys/types.h and should leave all of 
the sys/types.h additions that I've done to files that include 
sys/wait.h, but this idea conflicts with all other endian.h files 
(both ours and {Net,Open}BSDs), and is probably wrong in that 
requiring sys/anything for machine/anything is probably not too good.

Maybe the NetBSD way of moving machine/endian.h to sys/endian.h and 
having machine/endian.h as a simple ``#include <sys/endian.h>'' is 
the cleanest solution....

As for the src/usr.sbin/amd build - the only place that includes 
machine/endian.h directly - I'm not sure what should be done about that.
At the moment it includes sys/types.h first (which includes 
sys/endian.h !)...

-- 
Brian <brian@Awfulhak.org>                        <brian@[uk.]FreeBSD.org>
      <http://www.Awfulhak.org>;                   <brian@[uk.]OpenBSD.org>
Don't _EVER_ lose your sense of humour !




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200010181846.e9IIkZY00872>