From nobody Wed Nov 5 11:06:32 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1540294450188589.1658177965459; Tue, 23 Oct 2018 04:34:10 -0700 (PDT) Received: from localhost ([::1]:40324 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gEuwl-0001dA-4m for importer@patchew.org; Tue, 23 Oct 2018 07:34:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42823) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gEuml-0001rP-61 for qemu-devel@nongnu.org; Tue, 23 Oct 2018 07:23:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gEumj-0007lt-5i for qemu-devel@nongnu.org; Tue, 23 Oct 2018 07:23:43 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:42320) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gEumi-0007l0-Ur for qemu-devel@nongnu.org; Tue, 23 Oct 2018 07:23:41 -0400 Received: by mail-wr1-f66.google.com with SMTP id a9so1257166wrx.9 for ; Tue, 23 Oct 2018 04:23:40 -0700 (PDT) Received: from localhost.localdomain (nat-pool-brq-t.redhat.com. [213.175.37.10]) by smtp.gmail.com with ESMTPSA id g8-v6sm1498990wmf.45.2018.10.23.04.23.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 23 Oct 2018 04:23:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=d491FpMiPyLN4soVzPHVurluyjfPPmTjI5R5mydFo7E=; b=SlcWuQvp9C1eKnrGj44LG/otFnDxw4XoxbwXeOwhGXdQ5q2tlkjSEHyAaHUnMlabdX Bo5YmJSrmldJ5lgxRqT9w1TIolSaHILKrIatUrKi++IhN+Wn8L/3fI50jbBv28DWxpgx cqfqmUzIf/IOHMSk1qGtYIshcKPBD3v3IxeO9ql/qXs2gXW8BFA/sCfgsPdcUiIzQEk4 xxHDF682S+LmpZ3CthBdE1kIDg+CYMT87Uw8zXHGneeKWUc26I4JhVw8+WgeUtTMgtsm MvBHvnsE3ofhR1AP+dskjkbmYtSOf3OQnmAqTUKTubI/D5hSIgkAIPhC6kKXYyLcczAf GnLw== X-Gm-Message-State: ABuFfoheqB4QFNa5vq+GlKgwN2CpgjRnOJzl+njcUqhKZZL3z0odJMpX /GEZvP69JMpmBYVfjHcR7KfJEyZYwkY= X-Google-Smtp-Source: ACcGV61Jvo2eKvoR9e5j+O31HFG9ItSn2nEzHwSlo/abu+PEtNZfyWJZSCwEeYLdM1kYagvB17lN0g== X-Received: by 2002:adf:ecc9:: with SMTP id s9-v6mr47109743wro.142.1540293819619; Tue, 23 Oct 2018 04:23:39 -0700 (PDT) From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= To: qemu-devel@nongnu.org Date: Tue, 23 Oct 2018 13:23:20 +0200 Message-Id: <9a5ef741f75e87ef47f2f36b4075d55789b30870.1540293796.git.tgolembi@redhat.com> X-Mailer: git-send-email 2.19.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.221.66 Subject: [Qemu-devel] [PATCH v5 11/14] qga-win: refactor disk info X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michael Roth , Olga Krishtal , =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= , Sameeh Jubran , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Refactor building of disk info into a function that builds the list and a function that returns infor for single disk. This will be used in future commit that will handle multi-disk volumes. Signed-off-by: Tom=C3=A1=C5=A1 Golembiovsk=C3=BD --- qga/commands-win32.c | 58 ++++++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/qga/commands-win32.c b/qga/commands-win32.c index e7d9cdea62..bb9bf0218a 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -637,20 +637,15 @@ out_free: return; } =20 -/* VSS provider works with volumes, thus there is no difference if - * the volume consist of spanned disks. Info about the first disk in the - * volume is returned for the spanned disk group (LVM) */ -static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **err= p) +static void get_single_disk_info(char *name, GuestDiskAddress *disk, + Error **errp) { - GuestDiskAddressList *list =3D NULL; - GuestDiskAddress *disk; SCSI_ADDRESS addr, *scsi_ad; DWORD len; HANDLE vol_h; Error *local_err =3D NULL; =20 scsi_ad =3D &addr; - char *name =3D g_strndup(guid, strlen(guid)-1); =20 g_debug("getting disk info for: %s", name); vol_h =3D CreateFile(name, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, @@ -660,7 +655,6 @@ static GuestDiskAddressList *build_guest_disk_info(char= *guid, Error **errp) goto err; } =20 - disk =3D g_malloc0(sizeof(*disk)); get_disk_properties(vol_h, disk, &local_err); if (local_err) { error_propagate(errp, local_err); @@ -671,7 +665,11 @@ static GuestDiskAddressList *build_guest_disk_info(cha= r *guid, Error **errp) /* always set pci_controller as required by schema. get_pci_info() sho= uld * report -1 values for non-PCI buses rather than fail. */ - disk->pci_controller =3D get_pci_info(name, errp); + disk->pci_controller =3D get_pci_info(name, &local_err); + if (local_err) { + error_propagate(errp, local_err); + goto err_close; + } if (disk->bus_type =3D=3D GUEST_DISK_BUS_TYPE_SCSI || disk->bus_type =3D=3D GUEST_DISK_BUS_TYPE_IDE || disk->bus_type =3D=3D GUEST_DISK_BUS_TYPE_RAID @@ -694,20 +692,44 @@ static GuestDiskAddressList *build_guest_disk_info(ch= ar *guid, Error **errp) * information about volume. */ } =20 - list =3D g_malloc0(sizeof(*list)); - list->value =3D disk; - list->next =3D NULL; - CloseHandle(vol_h); - g_free(name); - return list; - err_close: - g_free(disk); CloseHandle(vol_h); err: + return; +} + +/* VSS provider works with volumes, thus there is no difference if + * the volume consist of spanned disks. Info about the first disk in the + * volume is returned for the spanned disk group (LVM) */ +static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **err= p) +{ + Error *local_err =3D NULL; + GuestDiskAddressList *list =3D NULL, *cur_item =3D NULL; + GuestDiskAddress *disk =3D NULL; + + /* strip final backslash */ + char *name =3D g_strdup(guid); + if (g_str_has_suffix(name, "\\")) { + name[strlen(name) - 1] =3D 0; + } + + disk =3D g_malloc0(sizeof(GuestDiskAddress)); + get_single_disk_info(name, disk, &local_err); + if (local_err) { + error_propagate(errp, local_err); + goto out; + } + + cur_item =3D g_malloc0(sizeof(*list)); + cur_item->value =3D disk; + disk =3D NULL; + list =3D cur_item; + +out: + qapi_free_GuestDiskAddress(disk); g_free(name); =20 - return NULL; + return list; } =20 #else --=20 2.19.0