Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Nov 2011 00:01:16 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Alexey Dokuchaev <danfe@freebsd.org>
Cc:        svn-src-head@freebsd.org, Marius Strobl <marius@freebsd.org>, src-committers@freebsd.org, svn-src-all@freebsd.org
Subject:   Re: svn commit: r226947 - in head/sys: dev/esp sparc64/sbus
Message-ID:  <20111031233854.Y1523@besplex.bde.org>
In-Reply-To: <20111031042526.GA57014@FreeBSD.org>
References:  <201110302117.p9ULHgLD085245@svn.freebsd.org> <20111031042526.GA57014@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 31 Oct 2011, Alexey Dokuchaev wrote:

> On Sun, Oct 30, 2011 at 09:17:42PM +0000, Marius Strobl wrote:
>> Log:
>>   - Use device_t rather than the NetBSDish struct device.
>
> Hmm, I though that style(9) advises against this practice:
>
>    Avoid using typedefs for structure types.  Typedefs are problematic
>    because they do not properly hide their underlying type; [...]
>
>    When convention requires a typedef, make its name match the struct tag.
>    Avoid typedefs ending in _t, except as specified in Standard C or by
>    POSIX.
>
> Does these rules not apply for struct device for some reason?

Yes (they don't apply here).  device_t is one of a few properly opaque
typedefs for struct pointers.  'struct device' is only (completely)
declared in kern/subr_bus.c.  Thus the implementation details of it
obviously cannot escape to drivers.  Most of the APIs in <sys/bus.h>
are supposed to be like this.  But `typedef struct kobj_class driver_t'
and `#define driver_method_t kobj_method_t' are gross exceptions.
<sys/bus.h> has to include <sys/kobj.h> for dereferencing these, and
kobj.h breaks the rule by providing both typedefs for struct pointers
and complete struct declarations.

Bruce



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