> Date: Wed, 4 Aug 2021 17:52:46 -0700 > From: Jason Thorpe <thor...@me.com> > > > On Aug 1, 2021, at 11:10 AM, Martin Husemann <mar...@duskware.de> wrote: > > > > On Sun, Aug 01, 2021 at 07:57:20AM -0700, Jason Thorpe wrote: > >> The situation hasn't changed. I'm still waiting for concrete proposals. > > > > The concrete proposal is backout - if there is no better idea how to deal > > with it properly. > > I have reworked it on the thorpej-cfargs2 branch. It addresses the > concerns about compile-time type checking by using an anonymous > structure constructed in-line with the help of a variadic > preprocessor macro (to save wear and tear on your fingers and > keyboard that might otherwise occur because of annoying boilerplate > syntax to construct the structure in-line).
Thanks, this looks much better! No more objections from me. For future work (definitely not a blocker for this or netbsd-10 or anything) it would be nice if we could incorporate typed interface attributes rather than just strings that are copied & pasted into the source code and never checked until runtime. For example, in files.usb we could have something like define usbdevif <struct usb_attach_args> { [port = -1], ... } which would lead config(8) to generate static struct ifattachargs IA_USBDEVIF(struct usb_attach_args *args) { return (struct ifattachargs) { .iaa_name = "usbdevif", .iaa_args = args, }; } and in usb_subr.c the code would be dv = config_found(parent, IA_USBDEVIF(&uaa), ...); with everything here verified by the compiler at compile-time. Shouldn't be much effort to implement this -- just local changes in config(8). (I did something similar in picopb, e.g. <https://mumble.net/~campbell/hg/picopb/test/disk/disk.pb.h-good> and <https://mumble.net/~campbell/hg/picopb/test/disk/disk.c>.) A stretch goal would be to push the types into the attach function too, e.g. int uwhatever_attach(device_t parent, device_t self, struct usb_attach_args *uaa) { ... } but that might take a bit more work.