From: minglei.liu Date: Tue, 23 Sep 2025 11:32:43 +0000 (+0800) Subject: qga: Improve Windows filesystem space info retrieval logic X-Git-Tag: v10.2.0-rc1~30^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c741c087b8fb926f9e9e9150456784238c2e039b;p=thirdparty%2Fqemu.git 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 Reviewed-by: Kostiantyn Kostiuk Link: https://lore.kernel.org/qemu-devel/20250923113243.78244-1-minglei.liu@smartx.com Signed-off-by: Kostiantyn Kostiuk --- diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 82274808101..acc2c115894 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -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);