From nobody Sun Feb 8 09:30:45 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1518713773134685.4669493221708; Thu, 15 Feb 2018 08:56:13 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DDCFC7B00C; Thu, 15 Feb 2018 16:56:11 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D268B60260; Thu, 15 Feb 2018 16:56:08 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C61181806103; Thu, 15 Feb 2018 16:56:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1FGiCuJ025939 for ; Thu, 15 Feb 2018 11:44:12 -0500 Received: by smtp.corp.redhat.com (Postfix) id 317C22026609; Thu, 15 Feb 2018 16:44:12 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.42.22.189]) by smtp.corp.redhat.com (Postfix) with ESMTP id C93AA2024CA8; Thu, 15 Feb 2018 16:44:11 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Thu, 15 Feb 2018 16:43:40 +0000 Message-Id: <20180215164347.11538-36-berrange@redhat.com> In-Reply-To: <20180215164347.11538-1-berrange@redhat.com> References: <20180215164347.11538-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 35/42] storage: add default: case to all switch statements 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 15 Feb 2018 16:56:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Even if the compiler has validated that all enum constants have case statements in a switch, it is not safe to omit a default: case statement. When assigning a value to a variable / struct field that is defined with an enum type, nothing prevents an invalid value being assigned. So defensive code must assume existance of invalid values and thus all switches should have a default: case. Signed-off-by: Daniel P. Berrang=C3=A9 --- src/storage/storage_backend_gluster.c | 12 ++++++++++-- src/storage/storage_backend_rbd.c | 6 +++++- src/storage/storage_driver.c | 1 + src/storage/storage_util.c | 18 ++++++++++++++++-- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_ba= ckend_gluster.c index c6cc531e2f..68c3ad0fab 100644 --- a/src/storage/storage_backend_gluster.c +++ b/src/storage/storage_backend_gluster.c @@ -436,7 +436,6 @@ virStorageBackendGlusterVolDelete(virStoragePoolObjPtr = pool, case VIR_STORAGE_VOL_DIR: case VIR_STORAGE_VOL_BLOCK: case VIR_STORAGE_VOL_PLOOP: - case VIR_STORAGE_VOL_LAST: virReportError(VIR_ERR_NO_SUPPORT, _("removing of '%s' volumes is not supported " "by the gluster backend: %s"), @@ -472,6 +471,12 @@ virStorageBackendGlusterVolDelete(virStoragePoolObjPtr= pool, } } break; + + case VIR_STORAGE_VOL_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected storage vol type %d"), vol->type); + goto cleanup; } =20 ret =3D 0; @@ -606,7 +611,10 @@ virStorageFileBackendGlusterInitServer(virStorageFileB= ackendGlusterPrivPtr priv, break; =20 case VIR_STORAGE_NET_HOST_TRANS_LAST: - break; + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected storage host transport %d"), host->tr= ansport); + return -1; } =20 VIR_DEBUG("adding gluster host for %p: transport=3D%s host=3D%s port= =3D%d", diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backen= d_rbd.c index 642cacb673..e5d9d59ca0 100644 --- a/src/storage/storage_backend_rbd.c +++ b/src/storage/storage_backend_rbd.c @@ -1252,10 +1252,14 @@ virStorageBackendRBDVolWipe(virStoragePoolObjPtr po= ol, case VIR_STORAGE_VOL_WIPE_ALG_PFITZNER7: case VIR_STORAGE_VOL_WIPE_ALG_PFITZNER33: case VIR_STORAGE_VOL_WIPE_ALG_RANDOM: - case VIR_STORAGE_VOL_WIPE_ALG_LAST: virReportError(VIR_ERR_INVALID_ARG, _("unsupported algorithm %d"), algorithm); goto cleanup; + case VIR_STORAGE_VOL_WIPE_ALG_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected storage vol wipe algorith %d"), algor= ithm); + goto cleanup; } =20 if (r < 0) { diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index d5e38af5aa..10bf2e0bda 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -1602,6 +1602,7 @@ storageVolLookupByPathCallback(virStoragePoolObjPtr o= bj, case VIR_STORAGE_POOL_SHEEPDOG: case VIR_STORAGE_POOL_ZFS: case VIR_STORAGE_POOL_LAST: + default: ignore_value(VIR_STRDUP(stable_path, data->path)); break; } diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c index b4aed0f700..83a8494f78 100644 --- a/src/storage/storage_util.c +++ b/src/storage/storage_util.c @@ -2256,11 +2256,15 @@ virStorageBackendVolDeleteLocal(virStoragePoolObjPt= r pool ATTRIBUTE_UNUSED, case VIR_STORAGE_VOL_BLOCK: case VIR_STORAGE_VOL_NETWORK: case VIR_STORAGE_VOL_NETDIR: - case VIR_STORAGE_VOL_LAST: virReportError(VIR_ERR_NO_SUPPORT, _("removing block or network volumes is not support= ed: %s"), vol->target.path); return -1; + case VIR_STORAGE_VOL_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected storage vol type %d"), vol->type); + return -1; } return 0; } @@ -2749,8 +2753,9 @@ storageBackendVolWipeLocalFile(const char *path, _("'trim' algorithm not supported")); goto cleanup; case VIR_STORAGE_VOL_WIPE_ALG_LAST: + default: virReportError(VIR_ERR_INVALID_ARG, - _("unsupported algorithm %d"), + _("Unexpected storage vol wipe algorithm %d"), algorithm); goto cleanup; } @@ -3273,6 +3278,10 @@ virStorageBackendBLKIDFindEmpty(const char *device, "expected format '%s'"), device, format); break; + + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected storage blkid result %d"), rc); } =20 if (ret =3D=3D 0 && blkid_do_probe(probe) !=3D 1) { @@ -3448,6 +3457,11 @@ virStorageBackendPARTEDValidLabel(const char *device, virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Unknown Partition Type, requires build --overwri= te")); break; + + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected parted result %d"), check); + break; } =20 return ret; --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list