[libvirt] [PATCH 04/11] qemu_security: Kill code duplication

Martin Kletzander mkletzan at redhat.com
Wed Feb 8 14:55:07 UTC 2017


On Wed, Feb 08, 2017 at 03:49:47PM +0100, Peter Krempa wrote:
>On Wed, Feb 08, 2017 at 15:33:48 +0100, Michal Privoznik wrote:
>> On 02/08/2017 02:59 PM, Martin Kletzander wrote:
>> > On Wed, Feb 08, 2017 at 02:37:48PM +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:
>
>[...]
>
>>
>> This doesn't solve the syntax-check problem. But whatever, I will go
>> with this and just drop the syntax-check patch. We have plenty of
>> arguments for using macros here but since some don't like it I'm not
>> going to push it. Lets just hope that we will take care to use
>> qemuSecurity* wrappers instead of calling virSecurity APIs directly.
>> Honestly, I don't care that much.
>
>You can do a macro:
>
>#define QEMU_SECURITY_WRAPPED(func) func
>
>And then use it in the functions that wrap the function like:
>
>int
>qemuSecurityRestoreDiskLabel(virQEMUDriverPtr driver,
>                             virDomainObjPtr vm,
>                             virDomainDiskDefPtr disk)
>{
>    int ret = -1;
>
>    if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) &&
>        virSecurityManagerTransactionStart(driver->securityManager) < 0)
>        goto cleanup;
>
>    if (QEMU_SECURITY_WRAPPED(virSecurityManagerRestoreDiskLabel)(driver->securityManager,
>                                                                  vm->def,
>                                                                  disk) < 0)
>        goto cleanup;
>
>    if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) &&
>        virSecurityManagerTransactionCommit(driver->securityManager,
>                                            vm->pid) < 0)
>        goto cleanup;
>
>    ret = 0;
> cleanup:
>    virSecurityManagerTransactionAbort(driver->securityManager);
>    return ret;
>}
>
>But the conditions are to use a very distinctive name of the macro and
>the macro actually not doing much so that the readability of the code is
>preserved, while having an anchor point for automatically looking up the
>function names that were wrapped.
>
>Yet another option would be to do:
>
>#define QEMU_SECURITY_WRAPPED
>
>void QEMU_SECURITY_WRAPPED qemuSecurityRestoreAllLabel(virQEMUDriverPtr driver,
>                                                       virDomainObjPtr vm,
>                                                       bool migrated);
>
>In that case you need some 'sed' magic to figure out the function name
>though.
>

Why not just take the wrappers around virSecurity code, put them into
qemu_security or similar and allow virSecurity* functions only in that
file?  Clearly that file will only be wrappers, so it should help a lot.

>Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170208/5d1fa1e9/attachment-0001.sig>


More information about the libvir-list mailing list