From nobody Sun Feb 8 18:35:27 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) client-ip=209.132.183.39; envelope-from=libvir-list-bounces@redhat.com; helo=mx6-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by mx.zohomail.com with SMTPS id 1486550474371938.2282190924019; Wed, 8 Feb 2017 02:41:14 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v18AbSA7047665; Wed, 8 Feb 2017 05:37:28 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v18AbPaP001385 for ; Wed, 8 Feb 2017 05:37:25 -0500 Received: from moe.brq.redhat.com (dhcp129-131.brq.redhat.com [10.34.129.131]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v18AbLHe029088 for ; Wed, 8 Feb 2017 05:37:25 -0500 From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 8 Feb 2017 11:37:07 +0100 Message-Id: <5454772dfed0542ccc023636213916cd1f5df865.1486550004.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 04/11] qemu_security: Kill code duplication X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" 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 --- src/qemu/qemu_security.c | 179 ++++++++++++-------------------------------= ---- 1 file changed, 44 insertions(+), 135 deletions(-) diff --git a/src/qemu/qemu_security.c b/src/qemu/qemu_security.c index 35cdf50b0..b2155afcf 100644 --- a/src/qemu/qemu_security.c +++ b/src/qemu/qemu_security.c @@ -40,33 +40,49 @@ struct qemuSecuritySetRestoreAllLabelData { }; =20 =20 -int -qemuSecuritySetAllLabel(virQEMUDriverPtr driver, - virDomainObjPtr vm, - const char *stdin_path) -{ - int ret =3D -1; +#define PROLOGUE(F, type) = \ +int = \ +qemuSecurity##F(virQEMUDriverPtr driver, = \ + virDomainObjPtr vm, = \ + type var) = \ +{ = \ + int ret =3D -1; = \ + = \ + if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && = \ + virSecurityManagerTransactionStart(driver->securityManager) < 0) = \ + goto cleanup; = \ =20 - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionStart(driver->securityManager) < 0) - goto cleanup; - - if (virSecurityManagerSetAllLabel(driver->securityManager, - vm->def, - stdin_path) < 0) - goto cleanup; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionCommit(driver->securityManager, - vm->pid) < 0) - goto cleanup; - - ret =3D 0; - cleanup: - virSecurityManagerTransactionAbort(driver->securityManager); - return ret; +#define EPILOGUE = \ + if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && = \ + virSecurityManagerTransactionCommit(driver->securityManager, = \ + vm->pid) < 0) = \ + goto cleanup; = \ + = \ + ret =3D 0; = \ + cleanup: = \ + virSecurityManagerTransactionAbort(driver->securityManager); = \ + return ret; = \ } =20 +#define WRAP1(F, type) = \ + PROLOGUE(F, type) = \ + if (virSecurityManager##F(driver->securityManager, = \ + vm->def, = \ + var) < 0) = \ + goto cleanup; = \ + = \ + EPILOGUE + +#define WRAP2(F, type) = \ + PROLOGUE(F, type) = \ + if (virSecurityManager##F(driver->securityManager, = \ + vm->def, = \ + var, NULL) < 0) = \ + goto cleanup; = \ + = \ + EPILOGUE + +WRAP1(SetAllLabel, const char *) =20 void qemuSecurityRestoreAllLabel(virQEMUDriverPtr driver, @@ -85,115 +101,8 @@ qemuSecurityRestoreAllLabel(virQEMUDriverPtr driver, } =20 =20 -int -qemuSecuritySetDiskLabel(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainDiskDefPtr disk) -{ - int ret =3D -1; +WRAP1(SetDiskLabel, virDomainDiskDefPtr) +WRAP1(RestoreDiskLabel, virDomainDiskDefPtr) =20 - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionStart(driver->securityManager) < 0) - goto cleanup; - - if (virSecurityManagerSetDiskLabel(driver->securityManager, - vm->def, - disk) < 0) - goto cleanup; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionCommit(driver->securityManager, - vm->pid) < 0) - goto cleanup; - - ret =3D 0; - cleanup: - virSecurityManagerTransactionAbort(driver->securityManager); - return ret; -} - - -int -qemuSecurityRestoreDiskLabel(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainDiskDefPtr disk) -{ - int ret =3D -1; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionStart(driver->securityManager) < 0) - goto cleanup; - - if (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 =3D 0; - cleanup: - virSecurityManagerTransactionAbort(driver->securityManager); - return ret; -} - - -int -qemuSecuritySetHostdevLabel(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainHostdevDefPtr hostdev) -{ - int ret =3D -1; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionStart(driver->securityManager) < 0) - goto cleanup; - - if (virSecurityManagerSetHostdevLabel(driver->securityManager, - vm->def, - hostdev, - NULL) < 0) - goto cleanup; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionCommit(driver->securityManager, - vm->pid) < 0) - goto cleanup; - - ret =3D 0; - cleanup: - virSecurityManagerTransactionAbort(driver->securityManager); - return ret; -} - - -int -qemuSecurityRestoreHostdevLabel(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainHostdevDefPtr hostdev) -{ - int ret =3D -1; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionStart(driver->securityManager) < 0) - goto cleanup; - - if (virSecurityManagerRestoreHostdevLabel(driver->securityManager, - vm->def, - hostdev, - NULL) < 0) - goto cleanup; - - if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) && - virSecurityManagerTransactionCommit(driver->securityManager, - vm->pid) < 0) - goto cleanup; - - ret =3D 0; - cleanup: - virSecurityManagerTransactionAbort(driver->securityManager); - return ret; -} +WRAP2(SetHostdevLabel, virDomainHostdevDefPtr) +WRAP2(RestoreHostdevLabel, virDomainHostdevDefPtr) --=20 2.11.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list