On Wed, Feb 08, 2017 at 14:37:48 +0100, Michal Privoznik wrote: > On 02/08/2017 01:43 PM, Peter Krempa wrote: > > On Wed, Feb 08, 2017 at 13:37:48 +0100, Michal Privoznik wrote: > >> On 02/08/2017 01:23 PM, Peter Krempa wrote: > >>> On Wed, Feb 08, 2017 at 11:37:07 +0100, Michal Privoznik wrote: > >>>> Nearly all of these functions look the same. Except for a > >>>> different virSecurityManager API call. There is no need to copy > >>>> paste the code when we can use macros to generate it. > >>>> > >>>> Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > >>>> --- > >>>> src/qemu/qemu_security.c | 179 ++++++++++++----------------------------------- > >>>> 1 file changed, 44 insertions(+), 135 deletions(-) > >>> > >>> NACK, please don't partialy define function with macros. > >>> > >> > >> Why not? What is the downside? > > > > You'll never be able to navigate to the body of the function or ever > > find it try 'vim -t qemuSecurityRestoreHostdevLabel' or navigate to > > that after that patch. > > I don't think this is ultimate goal. A lot of our code is written in a > callback style: var->cb(blaah). You cannot jump to the actual function > either. If doing 'vim -t' is the ultimate goal then we should ban > callbacks too. Callbacks are way different from this case. Even if you have a callback then a debugger prints the function name. The same applies for logs. With a macro that defines a function you get a function name that is not present in the source without pre-processing it. With the callback you still have the symbol, while the call path may be opaque. > > > > > The downside of the code being totally unreadable is way worse than a > > few copied lines. > > Well, I was asked in other review to not copy the lines. > Also, the upside is that we can have a syntax-check rule that checks if > qemuSecurity wrapper is used instead of calling bare virSecurity... I don't think that the macros are a requirement to have a syntax check. > > So what about: > > int > qemuSecurityRestoreHostdevLabel(virQEMUDriverPtr driver, ...) > { > WRAP(RestoreHostdevLabel); /* macro that wraps > virSecurityManagerRestoreHostdevLabel */ I'd extract the "PROLOGUE" and "EPILOGUE" parts as a function and then just call the wrapped function directly. I don't see a point to have a macro here. > } > > This way you can 'vim -t' into it. Although, the syntax-check rule is > going to be much more complex. Just wrap everything and outlaw it outside of this code then.
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list