mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:56:38 +00:00
qga: Improve Windows filesystem space info retrieval logic
Previously, disk space reporting only worked for volumes with drive letters,
skipping those without (e.g. System Reserved).
This change always calls GetDiskFreeSpaceEx with fs->name, which is a
volume GUID path. Windows APIs accept both drive letters (e.g. "C:\")
and volume GUIDs (e.g. "\\?\Volume{GUID}\") as valid lpDirectoryName
parameters, so space reporting is now consistent across all volumes.
Reference:
https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file
Signed-off-by: minglei.liu <minglei.liu@smartx.com>
Reviewed-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20250923113243.78244-1-minglei.liu@smartx.com
Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
committed by
Kostiantyn Kostiuk
parent
c38e65a881
commit
c741c087b8
@@ -1164,15 +1164,15 @@ static GuestFilesystemInfo *build_guest_fsinfo(char *guid, Error **errp)
|
||||
fs->mountpoint = g_strdup("System Reserved");
|
||||
} else {
|
||||
fs->mountpoint = g_strndup(mnt_point, len);
|
||||
if (GetDiskFreeSpaceEx(fs->mountpoint,
|
||||
(PULARGE_INTEGER) & i64FreeBytesToCaller,
|
||||
(PULARGE_INTEGER) & i64TotalBytes,
|
||||
(PULARGE_INTEGER) & i64FreeBytes)) {
|
||||
fs->used_bytes = i64TotalBytes - i64FreeBytes;
|
||||
fs->total_bytes = i64TotalBytes;
|
||||
fs->has_total_bytes = true;
|
||||
fs->has_used_bytes = true;
|
||||
}
|
||||
}
|
||||
if (GetDiskFreeSpaceEx(fs->name,
|
||||
(PULARGE_INTEGER) & i64FreeBytesToCaller,
|
||||
(PULARGE_INTEGER) & i64TotalBytes,
|
||||
(PULARGE_INTEGER) & i64FreeBytes)) {
|
||||
fs->used_bytes = i64TotalBytes - i64FreeBytes;
|
||||
fs->total_bytes = i64TotalBytes;
|
||||
fs->has_total_bytes = true;
|
||||
fs->has_used_bytes = true;
|
||||
}
|
||||
wcstombs(fs_name, wfs_name, sizeof(wfs_name));
|
||||
fs->type = g_strdup(fs_name);
|
||||
|
||||
Reference in New Issue
Block a user