All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, "Tomáš Golembiovský" <tgolembi@redhat.com>
Subject: [Qemu-devel] [PULL v3 13/24] qga-win: refactor disk info
Date: Wed, 31 Oct 2018 09:19:14 -0500	[thread overview]
Message-ID: <20181031141925.30026-14-mdroth@linux.vnet.ibm.com> (raw)
In-Reply-To: <20181031141925.30026-1-mdroth@linux.vnet.ibm.com>

From: Tomáš Golembiovský <tgolembi@redhat.com>

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áš Golembiovský <tgolembi@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 qga/commands-win32.c | 52 +++++++++++++++++++++++++++++---------------
 1 file changed, 35 insertions(+), 17 deletions(-)

diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 2d7b56d538..21a88d31e1 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -667,20 +667,15 @@ out_free:
     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 **errp)
+static void get_single_disk_info(char *name, GuestDiskAddress *disk,
+    Error **errp)
 {
-    GuestDiskAddressList *list = NULL;
-    GuestDiskAddress *disk;
     SCSI_ADDRESS addr, *scsi_ad;
     DWORD len;
     HANDLE vol_h;
     Error *local_err = NULL;
 
     scsi_ad = &addr;
-    char *name = g_strndup(guid, strlen(guid)-1);
 
     g_debug("getting disk info for: %s", name);
     vol_h = CreateFile(name, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
@@ -690,7 +685,6 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
         goto err;
     }
 
-    disk = g_malloc0(sizeof(*disk));
     get_disk_properties(vol_h, disk, &local_err);
     if (local_err) {
         error_propagate(errp, local_err);
@@ -730,20 +724,44 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
          * information about volume. */
     }
 
-    list = g_malloc0(sizeof(*list));
-    list->value = disk;
-    list->next = 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 **errp)
+{
+    Error *local_err = NULL;
+    GuestDiskAddressList *list = NULL, *cur_item = NULL;
+    GuestDiskAddress *disk = NULL;
+
+    /* strip final backslash */
+    char *name = g_strdup(guid);
+    if (g_str_has_suffix(name, "\\")) {
+        name[strlen(name) - 1] = 0;
+    }
+
+    disk = g_malloc0(sizeof(GuestDiskAddress));
+    get_single_disk_info(name, disk, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        goto out;
+    }
+
+    cur_item = g_malloc0(sizeof(*list));
+    cur_item->value = disk;
+    disk = NULL;
+    list = cur_item;
+
+out:
+    qapi_free_GuestDiskAddress(disk);
     g_free(name);
 
-    return NULL;
+    return list;
 }
 
 #else
-- 
2.17.1

  parent reply	other threads:[~2018-10-31 14:20 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 14:19 [Qemu-devel] [PULL v3 00/24] qemu-ga patch queue for soft-freeze Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 01/24] qga: Support Unicode paths in guest-file-open on win32 Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 02/24] qga-win: add support for qmp_guest_fsfreeze_freeze_list Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 03/24] qga: ignore non present cpus when handling qmp_guest_get_vcpus() Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 04/24] configure: add test for libudev Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 05/24] qga: linux: report disk serial number Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 06/24] qga: linux: return disk device in guest-get-fsinfo Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 07/24] qga-win: prevent crash when executing fsinfo command Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 08/24] qga-win: fsinfo: pci-info: allow partial info Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 09/24] build: rename CONFIG_QGA_NTDDDISK to CONFIG_QGA_NTDDSCSI Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 10/24] qga-win: add debugging information Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 11/24] qga-win: refactor disk properties (bus) Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 12/24] qga-win: report disk serial number Michael Roth
2018-10-31 14:19 ` Michael Roth [this message]
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 14/24] qga-win: handle multi-disk volumes Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 15/24] qga-win: return disk device in guest-get-fsinfo Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 16/24] qga-win: demystify namespace stripping Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 17/24] qga: fix an off-by-one issue Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 18/24] qga: group agent init/cleanup init separate routines Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 19/24] qga: hang GAConfig/socket_activation off of GAState global Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 20/24] qga: move w32 service handling out of run_agent() Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 21/24] qga: add --retry-path option for re-initializing channel on failure Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 22/24] qga-win: install service with --retry-path set by default Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 23/24] qga-win: report specific error when failing to open channel Michael Roth
2018-10-31 14:19 ` [Qemu-devel] [PULL v3 24/24] qga-win: changing --retry-path option behavior Michael Roth
2018-11-01 18:28 ` [Qemu-devel] [PULL v3 00/24] qemu-ga patch queue for soft-freeze Peter Maydell
2018-11-02  0:27 ` no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181031141925.30026-14-mdroth@linux.vnet.ibm.com \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=tgolembi@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.