From nobody Wed May 15 04:58:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647328109; cv=none; d=zohomail.com; s=zohoarc; b=ID0Or5gJ61oif6GcgMlUIF98AhawpI2tmAcUjhgh6QgFLMolZkmzz8f/MBGi2f0GPW7mSUATLnBO/ogni124LgaXJkTtdsQay56MZ6mlsb28o8JHlh7PrDyoTMZcQD5x5WTE25OlCUKcJnQ303344mCpropYYGkPhfPTKi+qNKU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647328109; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1PuRqU9W1POIjEIEaIu1CXLf8MQd75ppLsneD6NOMhY=; b=hbt10qhIYhyYi8uKS0CpVWgpwEwuJ2BCue1REAx7hwujilaTKHS9p89P7NogvAGsmfsE2IlM47OMH7mae6jWpS53tdg74cSeiRquDrCTW2Db92XalGSu3Uh1DFCAFIfbdnA8nHiDCIpM4zw+9frXNE5VGZ3VHKxxtR6CEu7pIf0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647328109217401.62501317087697; Tue, 15 Mar 2022 00:08:29 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-311-PkcghMU4Ns65SkQdNm2huA-1; Tue, 15 Mar 2022 03:08:26 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D90AB18A6583; Tue, 15 Mar 2022 07:08:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id C4D754B8D4D; Tue, 15 Mar 2022 07:08:22 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 536371953550; Tue, 15 Mar 2022 07:08:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 3D2AD194E021 for ; Tue, 15 Mar 2022 07:08:20 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 1F2BC40C1247; Tue, 15 Mar 2022 07:08:20 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.193.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id B0FAD400F8FE for ; Tue, 15 Mar 2022 07:08:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647328108; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=1PuRqU9W1POIjEIEaIu1CXLf8MQd75ppLsneD6NOMhY=; b=K9EX+92jBhyOMFOAJRPvM4t/YHFn4u7HGdA/bg7WA/Kqu2RVY88jzCeBlZHXjROCRWKkW6 K/nR/VC614qS+IjlYQ4B7YdOkJAi+ajaHhsEuEX2vsogHEI46n0IJL6GKhUNqBgFf5uxkN oytVLYCbWCRAH5wyhgzIt/j80L0UrA8= X-MC-Unique: PkcghMU4Ns65SkQdNm2huA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 1/3] virsh: Properly terminate string list in virshDomainInterfaceSourceModeCompleter() Date: Tue, 15 Mar 2022 08:08:15 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647328111593100001 Content-Type: text/plain; charset="utf-8" A completer must return a NULL terminated list of strings, which means that when dealing with enums, it has to allocate one pointer more than the value of VIR_XXX_LAST. But this is not honoured in virshDomainInterfaceSourceModeCompleter() leading to out of bounds read. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- tools/virsh-completer-domain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c index 250dd8b21a..9cc27b84cb 100644 --- a/tools/virsh-completer-domain.c +++ b/tools/virsh-completer-domain.c @@ -500,7 +500,7 @@ virshDomainInterfaceSourceModeCompleter(vshControl *ctl= G_GNUC_UNUSED, =20 virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIRSH_DOMAIN_INTERFACE_SOURCE_MODE_LAST); + ret =3D g_new0(char *, VIRSH_DOMAIN_INTERFACE_SOURCE_MODE_LAST + 1); =20 for (i =3D 0; i < VIRSH_DOMAIN_INTERFACE_SOURCE_MODE_LAST; i++) ret[i] =3D g_strdup(virshDomainInterfaceSourceModeTypeToString(i)); --=20 2.34.1 From nobody Wed May 15 04:58:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647328111; cv=none; d=zohomail.com; s=zohoarc; b=e6dnYvOvpqQdqBjQnv0urkeU9W9z+txAeNXqc1jRAcgJhUFrGG1VOOgfdR+e28q2W676QRU9I8Nn/ZI8/y5g73hed8RGMHB63CtwbzILXdmVgadIzTMg/Ik8efw4huz0VOd7SaclPax4JhkdnTGHY9QKtGCnXt+VFHiI3mtCMgw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647328111; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1izYe2Rp1RzCv7KECB7Zb/L96+Sh7VA7YEwbkBKJ3IA=; b=Vyr2s3no6rriwkoB5KTx4s0oyd/QeFEFXP6728OqNYou4TnJtFc09qXpJ5vRc6ooy09aZADAGuD8EwpSRFfZgCGyKMcpang0I6XpzHhQLclU64Y0XM7BABPy6WOBDAvB/6EDUL8nZ9Y8t2gEoJVadJoMmPsQmhzB4Vm0n+ncsGU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1647328111901698.3446954103186; Tue, 15 Mar 2022 00:08:31 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-656-68pttEVsP-iNunaqB3cAYQ-1; Tue, 15 Mar 2022 03:08:27 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 02482803D7A; Tue, 15 Mar 2022 07:08:25 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id E0431C28102; Tue, 15 Mar 2022 07:08:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id B8D94193211C; Tue, 15 Mar 2022 07:08:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id CA8CA194E021 for ; Tue, 15 Mar 2022 07:08:20 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id BACA74010A05; Tue, 15 Mar 2022 07:08:20 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.193.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5B04940E80E2 for ; Tue, 15 Mar 2022 07:08:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647328110; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=1izYe2Rp1RzCv7KECB7Zb/L96+Sh7VA7YEwbkBKJ3IA=; b=Q39Uq2GgeRXFULvK20boFwDphUzyacoWGlIzBNQNph+yq5k1ZDnV4hhRVi1M9kvnbqFntu wAeqwadOMhrC66TAyJ25w4cEn+W7FU92fIWP3ys7h5QmS+fj07q6IlloZbRiqGI742KoOr nLMrRaadNpltyd+MeXQMRRPAlWuvct0= X-MC-Unique: 68pttEVsP-iNunaqB3cAYQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 2/3] virsh: Introduce virshEnumComplete() Date: Tue, 15 Mar 2022 08:08:16 +0100 Message-Id: <0915d7ec09d8b3dc57bc8a6e4eb886adb698cb12.1647328065.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647328113881100001 Content-Type: text/plain; charset="utf-8" We have plenty of completers which iterate over all values of given enum and do nothing more than translate every member into string (using corresponding virXXXTypeToString()). Introduce a convenience function so that callers can pass just VIR_XXX_LAST and virXXXTypeToString and the rest is taken care of. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- tools/virsh-completer.c | 27 +++++++++++++++++++++++++++ tools/virsh-completer.h | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/tools/virsh-completer.c b/tools/virsh-completer.c index 3d77be3121..e5610d0fe8 100644 --- a/tools/virsh-completer.c +++ b/tools/virsh-completer.c @@ -57,6 +57,33 @@ */ =20 =20 +/** + * virshEnumComplete: + * @last: The number of element in enum (pass VIR_XXX_LAST) + * @intToStr: integer to string conversion (pass virXXXTypeToString) + * + * Convenient function to generate completions across all values + * of given enum. The enum, or values we want to generate, must + * start at 0 and be continuous until @last. + * + * Returns: string list of completions. + */ +char ** +virshEnumComplete(unsigned int last, + const char *(*intToStr)(int)) +{ + char **ret =3D NULL; + size_t i; + + ret =3D g_new0(char *, last + 1); + + for (i =3D 0; i < last; i++) + ret[i] =3D g_strdup(intToStr(i)); + + return ret; +} + + /** * virshCommaStringListComplete: * @input: user input so far diff --git a/tools/virsh-completer.h b/tools/virsh-completer.h index 1d7affbb23..131678dfbc 100644 --- a/tools/virsh-completer.h +++ b/tools/virsh-completer.h @@ -32,6 +32,10 @@ #include "virsh-completer-snapshot.h" #include "virsh-completer-volume.h" =20 +char ** +virshEnumComplete(unsigned int last, + const char *(*intToStr)(int)); + char ** virshCommaStringListComplete(const char *input, const char **options); --=20 2.34.1 From nobody Wed May 15 04:58:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647328143; cv=none; d=zohomail.com; s=zohoarc; b=GQ2yW3dYGZaqpzbb93qmAaYXrnUsv3is0Uxt1gZo8YNm0l67kh9JbzKyorZlZna0+yigQUkTUnxhYqDjrW2fXzhvy5qaQX3w4JQ+mWlXlbTqO0M4dJDYGZZEggtaOS2XlwammGUExUuji0X5rQjhPZdigNVGbJ1m+5GzYHiSyoU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647328143; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9uof99H9jYnetnU4QR6CbPlce8IrzU5ceTN9m3DZdDc=; b=Pqzl8+RxtJYaD7xAMfrlXreFGMWhlFnpOdghSIRRPLeXLgFv6uothvjOYmFlO/qAOi4hiEHJDEQWTANHVyizfT3ZZaOgznjJTlTRocJx8FYOT2o6NO0yc4g47MTOFGBwfyHWN66qVgKTYcjvY+w0GA+FojwIuF3URiaZ7Sb45Qw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647328143323860.7771264909186; Tue, 15 Mar 2022 00:09:03 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-7-rTr9_PUIO26bxfBX19xLFg-1; Tue, 15 Mar 2022 03:08:28 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3AD6C811E83; Tue, 15 Mar 2022 07:08:26 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 24809141DED5; Tue, 15 Mar 2022 07:08:26 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E52741930E27; Tue, 15 Mar 2022 07:08:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id AB4C11932106 for ; Tue, 15 Mar 2022 07:08:21 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 8159E40C1247; Tue, 15 Mar 2022 07:08:21 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.193.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id 03A4D40C128B for ; Tue, 15 Mar 2022 07:08:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647328142; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=9uof99H9jYnetnU4QR6CbPlce8IrzU5ceTN9m3DZdDc=; b=c/OCt6+t0UwcH2v7J0U0s7UbWBMrF/Zp+l5g39yoY+u1HRpPY7cMQG9nDdVX9bFZEP4tWz 8ablWCM/nJ7MZcK8LZNDEAJJwTdK7uzhcLBz3N3jATX7A2aOYJwUUQ6S0tXF7GF72Ivi13 u5MTNxMxM8NGc1KY6Hxnh25qIjWJJdE= X-MC-Unique: rTr9_PUIO26bxfBX19xLFg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 3/3] virsh: Don't open code virshEnumComplete() Date: Tue, 15 Mar 2022 08:08:17 +0100 Message-Id: <9d11f169a30d02a42b4ff66789302021aa414d84.1647328065.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647328145955100001 Content-Type: text/plain; charset="utf-8" Now that we have a function that generates string list for given enum, let's use that instead of open coding it. Note, after this there are still some 'candidates' left (e.g, virshNetworkEventNameCompleter(), or virshNetworkUpdateCommandCompleter()). These are not converted because either they don't have a convenient int2str function or they don't start from the very beginning of the enum. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- tools/virsh-completer-domain.c | 147 ++++++-------------------------- tools/virsh-completer-host.c | 11 +-- tools/virsh-completer-nodedev.c | 7 +- tools/virsh-completer-pool.c | 7 +- tools/virsh-completer-volume.c | 11 +-- 5 files changed, 36 insertions(+), 147 deletions(-) diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c index 9cc27b84cb..d4c877cd04 100644 --- a/tools/virsh-completer-domain.c +++ b/tools/virsh-completer-domain.c @@ -476,17 +476,10 @@ virshDomainInterfaceAddrSourceCompleter(vshControl *c= tl G_GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LAST + 1); - - for (i =3D 0; i < VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LAST; i++) - ret[i] =3D g_strdup(virshDomainInterfaceAddressesSourceTypeToStrin= g(i)); - - return ret; + return virshEnumComplete(VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LAST, + virshDomainInterfaceAddressesSourceTypeToStri= ng); } =20 =20 @@ -495,17 +488,10 @@ virshDomainInterfaceSourceModeCompleter(vshControl *c= tl G_GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIRSH_DOMAIN_INTERFACE_SOURCE_MODE_LAST + 1); - - for (i =3D 0; i < VIRSH_DOMAIN_INTERFACE_SOURCE_MODE_LAST; i++) - ret[i] =3D g_strdup(virshDomainInterfaceSourceModeTypeToString(i)); - - return ret; + return virshEnumComplete(VIRSH_DOMAIN_INTERFACE_SOURCE_MODE_LAST, + virshDomainInterfaceSourceModeTypeToString); } =20 =20 @@ -514,17 +500,10 @@ virshDomainHostnameSourceCompleter(vshControl *ctl G_= GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIRSH_DOMAIN_HOSTNAME_SOURCE_LAST + 1); - - for (i =3D 0; i < VIRSH_DOMAIN_HOSTNAME_SOURCE_LAST; i++) - ret[i] =3D g_strdup(virshDomainHostnameSourceTypeToString(i)); - - return ret; + return virshEnumComplete(VIRSH_DOMAIN_HOSTNAME_SOURCE_LAST, + virshDomainHostnameSourceTypeToString); } =20 =20 @@ -533,20 +512,17 @@ virshDomainPerfEnableCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags) { - size_t i =3D 0; g_auto(GStrv) events =3D NULL; const char *event =3D NULL; =20 virCheckFlags(0, NULL); =20 - events =3D g_new0(char *, VIR_PERF_EVENT_LAST + 1); - - for (i =3D 0; i < VIR_PERF_EVENT_LAST; i++) - events[i] =3D g_strdup(virPerfEventTypeToString(i)); - if (vshCommandOptStringQuiet(ctl, cmd, "enable", &event) < 0) return NULL; =20 + events =3D virshEnumComplete(VIR_PERF_EVENT_LAST, + virPerfEventTypeToString); + return virshCommaStringListComplete(event, (const char **)events); } =20 @@ -556,20 +532,17 @@ virshDomainPerfDisableCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags) { - size_t i =3D 0; g_auto(GStrv) events =3D NULL; const char *event =3D NULL; =20 virCheckFlags(0, NULL); =20 - events =3D g_new0(char *, VIR_PERF_EVENT_LAST + 1); - - for (i =3D 0; i < VIR_PERF_EVENT_LAST; i++) - events[i] =3D g_strdup(virPerfEventTypeToString(i)); - if (vshCommandOptStringQuiet(ctl, cmd, "disable", &event) < 0) return NULL; =20 + events =3D virshEnumComplete(VIR_PERF_EVENT_LAST, + virPerfEventTypeToString); + return virshCommaStringListComplete(event, (const char **)events); } =20 @@ -871,19 +844,10 @@ virshDomainSignalCompleter(vshControl *ctl G_GNUC_UNU= SED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - g_auto(GStrv) tmp =3D NULL; - size_t i =3D 0; - virCheckFlags(0, NULL); =20 - tmp =3D g_new0(char *, VIR_DOMAIN_PROCESS_SIGNAL_LAST + 1); - - for (i =3D 0; i < VIR_DOMAIN_PROCESS_SIGNAL_LAST; i++) { - const char *name =3D virshDomainProcessSignalTypeToString(i); - tmp[i] =3D g_strdup(name); - } - - return g_steal_pointer(&tmp); + return virshEnumComplete(VIR_DOMAIN_PROCESS_SIGNAL_LAST, + virshDomainProcessSignalTypeToString); } =20 =20 @@ -892,19 +856,10 @@ virshDomainLifecycleCompleter(vshControl *ctl G_GNUC_= UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - g_auto(GStrv) tmp =3D NULL; - size_t i =3D 0; - virCheckFlags(0, NULL); =20 - tmp =3D g_new0(char *, VIR_DOMAIN_LIFECYCLE_LAST + 1); - - for (i =3D 0; i < VIR_DOMAIN_LIFECYCLE_LAST; i++) { - const char *name =3D virshDomainLifecycleTypeToString(i); - tmp[i] =3D g_strdup(name); - } - - return g_steal_pointer(&tmp); + return virshEnumComplete(VIR_DOMAIN_LIFECYCLE_LAST, + virshDomainLifecycleTypeToString); } =20 =20 @@ -913,19 +868,10 @@ virshDomainLifecycleActionCompleter(vshControl *ctl G= _GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - g_auto(GStrv) tmp =3D NULL; - size_t i =3D 0; - virCheckFlags(0, NULL); =20 - tmp =3D g_new0(char *, VIR_DOMAIN_LIFECYCLE_ACTION_LAST + 1); - - for (i =3D 0; i < VIR_DOMAIN_LIFECYCLE_ACTION_LAST; i++) { - const char *action =3D virshDomainLifecycleActionTypeToString(i); - tmp[i] =3D g_strdup(action); - } - - return g_steal_pointer(&tmp); + return virshEnumComplete(VIR_DOMAIN_LIFECYCLE_ACTION_LAST, + virshDomainLifecycleActionTypeToString); } =20 =20 @@ -934,19 +880,10 @@ virshCodesetNameCompleter(vshControl *ctl G_GNUC_UNUS= ED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - g_auto(GStrv) tmp =3D NULL; - size_t i =3D 0; - virCheckFlags(0, NULL); =20 - tmp =3D g_new0(char *, VIR_KEYCODE_SET_LAST + 1); - - for (i =3D 0; i < VIR_KEYCODE_SET_LAST; i++) { - const char *name =3D virKeycodeSetTypeToString(i); - tmp[i] =3D g_strdup(name); - } - - return g_steal_pointer(&tmp); + return virshEnumComplete(VIR_KEYCODE_SET_LAST, + virKeycodeSetTypeToString); } =20 =20 @@ -1064,17 +1001,10 @@ virshDomainCoreDumpFormatCompleter(vshControl *ctl = G_GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIR_DOMAIN_CORE_DUMP_FORMAT_LAST + 1); - - for (i =3D 0; i < VIR_DOMAIN_CORE_DUMP_FORMAT_LAST; i++) - ret[i] =3D g_strdup(virshDomainCoreDumpFormatTypeToString(i)); - - return ret; + return virshEnumComplete(VIR_DOMAIN_CORE_DUMP_FORMAT_LAST, + virshDomainCoreDumpFormatTypeToString); } =20 =20 @@ -1100,17 +1030,10 @@ virshDomainStorageFileFormatCompleter(vshControl *c= tl G_GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIR_STORAGE_FILE_LAST + 1); - - for (i =3D 0; i < VIR_STORAGE_FILE_LAST; i++) - ret[i] =3D g_strdup(virStorageFileFormatTypeToString(i)); - - return ret; + return virshEnumComplete(VIR_STORAGE_FILE_LAST, + virStorageFileFormatTypeToString); } =20 =20 @@ -1119,17 +1042,10 @@ virshDomainNumatuneModeCompleter(vshControl *ctl G_= GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIR_DOMAIN_NUMATUNE_MEM_LAST + 1); - - for (i =3D 0; i < VIR_DOMAIN_NUMATUNE_MEM_LAST; i++) - ret[i] =3D g_strdup(virDomainNumatuneMemModeTypeToString(i)); - - return ret; + return virshEnumComplete(VIR_DOMAIN_NUMATUNE_MEM_LAST, + virDomainNumatuneMemModeTypeToString); } =20 =20 @@ -1138,15 +1054,8 @@ virshDomainDirtyRateCalcModeCompleter(vshControl *ct= l G_GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIRSH_DOMAIN_DIRTYRATE_CALC_MODE_LAST + 1); - - for (i =3D 0; i < VIRSH_DOMAIN_DIRTYRATE_CALC_MODE_LAST; i++) - ret[i] =3D g_strdup(virshDomainDirtyRateCalcModeTypeToString(i)); - - return ret; + return virshEnumComplete(VIRSH_DOMAIN_DIRTYRATE_CALC_MODE_LAST, + virshDomainDirtyRateCalcModeTypeToString); } diff --git a/tools/virsh-completer-host.c b/tools/virsh-completer-host.c index 3795d1fd3a..40cb687582 100644 --- a/tools/virsh-completer-host.c +++ b/tools/virsh-completer-host.c @@ -175,15 +175,8 @@ virshNodeSuspendTargetCompleter(vshControl *ctl G_GNUC= _UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIR_NODE_SUSPEND_TARGET_LAST + 1); - - for (i =3D 0; i < VIR_NODE_SUSPEND_TARGET_LAST; i++) - ret[i] =3D g_strdup(virshNodeSuspendTargetTypeToString(i)); - - return ret; + return virshEnumComplete(VIR_NODE_SUSPEND_TARGET_LAST, + virshNodeSuspendTargetTypeToString); } diff --git a/tools/virsh-completer-nodedev.c b/tools/virsh-completer-nodede= v.c index d10bf2b78c..bf6e809b5a 100644 --- a/tools/virsh-completer-nodedev.c +++ b/tools/virsh-completer-nodedev.c @@ -91,17 +91,14 @@ virshNodeDeviceCapabilityNameCompleter(vshControl *ctl, { g_auto(GStrv) tmp =3D NULL; const char *cap_str =3D NULL; - size_t i =3D 0; =20 virCheckFlags(0, NULL); =20 if (vshCommandOptStringQuiet(ctl, cmd, "cap", &cap_str) < 0) return NULL; =20 - tmp =3D g_new0(char *, VIR_NODE_DEV_CAP_LAST + 1); - - for (i =3D 0; i < VIR_NODE_DEV_CAP_LAST; i++) - tmp[i] =3D g_strdup(virNodeDevCapTypeToString(i)); + tmp =3D virshEnumComplete(VIR_NODE_DEV_CAP_LAST, + virNodeDevCapTypeToString); =20 return virshCommaStringListComplete(cap_str, (const char **)tmp); } diff --git a/tools/virsh-completer-pool.c b/tools/virsh-completer-pool.c index 84e9d6cc5a..1a966d95b9 100644 --- a/tools/virsh-completer-pool.c +++ b/tools/virsh-completer-pool.c @@ -94,17 +94,14 @@ virshPoolTypeCompleter(vshControl *ctl, { g_auto(GStrv) tmp =3D NULL; const char *type_str =3D NULL; - size_t i =3D 0; =20 virCheckFlags(0, NULL); =20 if (vshCommandOptStringQuiet(ctl, cmd, "type", &type_str) < 0) return NULL; =20 - tmp =3D g_new0(char *, VIR_STORAGE_POOL_LAST + 1); - - for (i =3D 0; i < VIR_STORAGE_POOL_LAST; i++) - tmp[i] =3D g_strdup(virStoragePoolTypeToString(i)); + tmp =3D virshEnumComplete(VIR_STORAGE_POOL_LAST, + virStoragePoolTypeToString); =20 return virshCommaStringListComplete(type_str, (const char **)tmp); } diff --git a/tools/virsh-completer-volume.c b/tools/virsh-completer-volume.c index bed45fa1ca..a1ebadccac 100644 --- a/tools/virsh-completer-volume.c +++ b/tools/virsh-completer-volume.c @@ -123,15 +123,8 @@ virshStorageVolWipeAlgorithmCompleter(vshControl *ctl = G_GNUC_UNUSED, const vshCmd *cmd G_GNUC_UNUSED, unsigned int flags) { - char **ret =3D NULL; - size_t i; - virCheckFlags(0, NULL); =20 - ret =3D g_new0(char *, VIR_STORAGE_VOL_WIPE_ALG_LAST + 1); - - for (i =3D 0; i < VIR_STORAGE_VOL_WIPE_ALG_LAST; i++) - ret[i] =3D g_strdup(virshStorageVolWipeAlgorithmTypeToString(i)); - - return ret; + return virshEnumComplete(VIR_STORAGE_VOL_WIPE_ALG_LAST, + virshStorageVolWipeAlgorithmTypeToString); } --=20 2.34.1