> > > You really have to pick some pretty excessive type names (or variable > > > names) to get close to 80 characters. Again, to pick an example: > > > > > > struct timer_group_priv *priv = container_of(handle, > > > struct timer_group_priv, timer[handle->num]); > > > > > > ends up being long even if you were to split it, but that funky > > > container_from() wouldn't have helped the real problem - the fact that > > > the above is complex and nasty. > > The point about doing the assignment with the declaration certainly makes > the "ugliness" worse, I agree. I'm still not generally convinced about > the redundancy level pros/cons, but I concede that having a common idiom > (rather than a succinct but subsystem-dependent idiom) is better for > people reading the code for the first time. > > > > And I had to _search_ for that example. All the normal cases of > > > split-line container-of's were due to doing it with the declaration, > > > or beause the first argument ended up being an expression in itself > > > and the nested expressions made it more complex. > > > > Speaking of searching, this kind of typeof use is, IMO, actively > > harmful - it makes finding the places where we might get from > > e.g. linked list to containing objects much harder. container_of > > (unless combined with obfuscating use of typeof()) at least gives > > you a chance to grep - struct foo *not* followed by '*' is a pattern > > that doesn't give too many false positives. This one, OTOH, is > > essentially impossible to grep for. > > And this observation about workflow does strike a chord with me. I do end > up with those kind of searches too. In trying to examine my preferences > here, I think my instincts are to avoid open-coded types (leading me to > want to use typeof()) but I think those instincts were actually developed > from dealing with _sizeof_ and all the way it goes terribly wrong. So, > okay, I'm convinced. container_of() it is.
so container_of() it is :) Will start updating the rest of the patches. Thanks, - Allen > Doing these conversions becomes a little less mechanical if assignment > needs to be split from declaration, but hey, we've got a 100 character > line "limit" now, so maybe it'll be less needed. :) > > -- > Kees Cook