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>