qga-win: refactor disk info
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>
This commit is contained in:
parent
fb08aa703f
commit
9e65fd659e
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user