All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konstantin Kostiuk <kkostiuk@redhat.com>
To: qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>
Subject: [PULL 8/9] qga-win: Detect OS based on Windows 10 by first build number
Date: Mon, 10 Jan 2022 15:46:43 +0200	[thread overview]
Message-ID: <20220110134644.107375-9-kkostiuk@redhat.com> (raw)
In-Reply-To: <20220110134644.107375-1-kkostiuk@redhat.com>

From: Kostiantyn Kostiuk <konstantin@daynix.com>

Windows Server 2016, 2019, 2022 are based on Windows 10 and
have the same major and minor versions. So, the only way to
detect the proper version is to use the build number.

Before this commit, the guest agent use the last build number
for each OS, but it causes problems when new OS releases.
There are few preview versions before release, and we
can't update this list.

After this commit, the guest agent will use the first build
number. For each new preview version or release version,
Microsoft increases the build number, so we can add the number
of the first preview build and this will work until the new
OS release.

Signed-off-by: Kostiantyn Kostiuk <konstantin@daynix.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
---
 qga/commands-win32.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 892082504f..3f60419419 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -2195,7 +2195,7 @@ static ga_matrix_lookup_t const WIN_VERSION_MATRIX[2][8] = {
 };
 
 typedef struct _ga_win_10_0_server_t {
-    int final_build;
+    int first_build;
     char const *version;
     char const *version_id;
 } ga_win_10_0_server_t;
@@ -2235,18 +2235,22 @@ static char *ga_get_win_name(OSVERSIONINFOEXW const *os_version, bool id)
     int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION);
     ga_matrix_lookup_t const *table = WIN_VERSION_MATRIX[tbl_idx];
     ga_win_10_0_server_t const *win_10_0_table = WIN_10_0_SERVER_VERSION_MATRIX;
+    ga_win_10_0_server_t const *win_10_0_version = NULL;
     while (table->version != NULL) {
         if (major == 10 && minor == 0 && tbl_idx) {
             while (win_10_0_table->version != NULL) {
-                if (build <= win_10_0_table->final_build) {
-                    if (id) {
-                        return g_strdup(win_10_0_table->version_id);
-                    } else {
-                        return g_strdup(win_10_0_table->version);
-                    }
+                if (build >= win_10_0_table->first_build) {
+                    win_10_0_version = win_10_0_table;
                 }
                 win_10_0_table++;
             }
+            if (win_10_0_table) {
+                if (id) {
+                    return g_strdup(win_10_0_version->version_id);
+                } else {
+                    return g_strdup(win_10_0_version->version);
+                }
+            }
         } else if (major == table->major && minor == table->minor) {
             if (id) {
                 return g_strdup(table->version_id);
-- 
2.25.1



  parent reply	other threads:[~2022-01-10 14:01 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-10 13:46 [PULL 0/9] qemu-ga-win patches Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 1/9] MAINTAINERS: Add entry for QEMU Guest Agent Windows components Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 2/9] gqa-win: get_pci_info: Clean dev_info if handle is valid Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 3/9] gqa-win: get_pci_info: Use common 'end' label Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 4/9] gqa-win: get_pci_info: Free parent_dev_info properly Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 5/9] gqa-win: get_pci_info: Split logic to separate functions Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 6/9] gqa-win: get_pci_info: Add g_autofree for few variables Konstantin Kostiuk
2022-01-10 13:46 ` [PULL 7/9] gqa-win: get_pci_info: Replace 'while' with 2 calls of the function Konstantin Kostiuk
2022-01-10 13:46 ` Konstantin Kostiuk [this message]
2022-01-10 13:46 ` [PULL 9/9] qga-win: Detect Windows 11 by build number Konstantin Kostiuk
2022-01-10 14:14 ` [PULL 0/9] qemu-ga-win patches Philippe Mathieu-Daudé
2022-01-10 14:16   ` Peter Maydell
2022-01-10 14:37     ` Konstantin Kostiuk
2022-01-15 12:40 ` Peter Maydell
2022-01-15 22:13   ` Konstantin Kostiuk
2022-01-16 20:11     ` Peter Maydell

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=20220110134644.107375-9-kkostiuk@redhat.com \
    --to=kkostiuk@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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.