From: Philippe Mathieu-Daudé <philmd@linaro.org>
ga_get_win_name() iterates over all elements in the arrays by
checking the 'version' field is non-NULL. Since the arrays are
guarded by a NULL terminating element, we don't need to specify
their size:
static char *ga_get_win_name(...)
{
...
const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx];
const ga_win_10_0_t *win_10_0_table = ...
...
while (table->version != NULL) {
^^^^^^^^^^^^^^^
while (win_10_0_table->version != NULL) {
^^^^^^^^^^^^^^^
This will simplify maintenance when adding new entries to these
arrays.
Split WIN_VERSION_MATRIX into WIN_CLIENT_VERSION_MATRIX and
WIN_SERVER_VERSION_MATRIX because multidimensional array must
have bounds for all dimensions except the first.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240222152835.72095-3-philmd@linaro.org>
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
---
qga/commands-win32.c | 52 +++++++++++++++++++++-----------------------
1 file changed, 25 insertions(+), 27 deletions(-)
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 79b5a580c9..a830f1494e 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -2124,45 +2124,42 @@ typedef struct _ga_matrix_lookup_t {
const char *version_id;
} ga_matrix_lookup_t;
-static const ga_matrix_lookup_t WIN_VERSION_MATRIX[2][7] = {
- {
- /* Desktop editions */
- { 5, 0, "Microsoft Windows 2000", "2000"},
- { 5, 1, "Microsoft Windows XP", "xp"},
- { 6, 0, "Microsoft Windows Vista", "vista"},
- { 6, 1, "Microsoft Windows 7" "7"},
- { 6, 2, "Microsoft Windows 8", "8"},
- { 6, 3, "Microsoft Windows 8.1", "8.1"},
- { 0, 0, 0}
- },{
- /* Server editions */
- { 5, 2, "Microsoft Windows Server 2003", "2003"},
- { 6, 0, "Microsoft Windows Server 2008", "2008"},
- { 6, 1, "Microsoft Windows Server 2008 R2", "2008r2"},
- { 6, 2, "Microsoft Windows Server 2012", "2012"},
- { 6, 3, "Microsoft Windows Server 2012 R2", "2012r2"},
- { 0, 0, 0},
- { 0, 0, 0}
- }
+static const ga_matrix_lookup_t WIN_CLIENT_VERSION_MATRIX[] = {
+ { 5, 0, "Microsoft Windows 2000", "2000"},
+ { 5, 1, "Microsoft Windows XP", "xp"},
+ { 6, 0, "Microsoft Windows Vista", "vista"},
+ { 6, 1, "Microsoft Windows 7" "7"},
+ { 6, 2, "Microsoft Windows 8", "8"},
+ { 6, 3, "Microsoft Windows 8.1", "8.1"},
+ { }
+};
+
+static const ga_matrix_lookup_t WIN_SERVER_VERSION_MATRIX[] = {
+ { 5, 2, "Microsoft Windows Server 2003", "2003"},
+ { 6, 0, "Microsoft Windows Server 2008", "2008"},
+ { 6, 1, "Microsoft Windows Server 2008 R2", "2008r2"},
+ { 6, 2, "Microsoft Windows Server 2012", "2012"},
+ { 6, 3, "Microsoft Windows Server 2012 R2", "2012r2"},
+ { },
};
typedef struct _ga_win_10_0_t {
int first_build;
- const char *version;
- const char *version_id;
+ char const *version;
+ char const *version_id;
} ga_win_10_0_t;
-static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[4] = {
+static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[] = {
{14393, "Microsoft Windows Server 2016", "2016"},
{17763, "Microsoft Windows Server 2019", "2019"},
{20344, "Microsoft Windows Server 2022", "2022"},
- {0, 0}
+ { }
};
-static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[3] = {
+static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[] = {
{10240, "Microsoft Windows 10", "10"},
{22000, "Microsoft Windows 11", "11"},
- {0, 0}
+ { }
};
static void ga_get_win_version(RTL_OSVERSIONINFOEXW *info, Error **errp)
@@ -2191,7 +2188,8 @@ static char *ga_get_win_name(const OSVERSIONINFOEXW *os_version, bool id)
DWORD minor = os_version->dwMinorVersion;
DWORD build = os_version->dwBuildNumber;
int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION);
- const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx];
+ const ga_matrix_lookup_t *table = tbl_idx ?
+ WIN_SERVER_VERSION_MATRIX : WIN_CLIENT_VERSION_MATRIX;
const ga_win_10_0_t *win_10_0_table = tbl_idx ?
WIN_10_0_SERVER_VERSION_MATRIX : WIN_10_0_CLIENT_VERSION_MATRIX;
const ga_win_10_0_t *win_10_0_version = NULL;
--
2.44.0
On Mon, Mar 4, 2024 at 3:45 PM Konstantin Kostiuk <kkostiuk@redhat.com> wrote: > > From: Philippe Mathieu-Daudé <philmd@linaro.org> > > ga_get_win_name() iterates over all elements in the arrays by > checking the 'version' field is non-NULL. Since the arrays are > guarded by a NULL terminating element, we don't need to specify > their size: > > static char *ga_get_win_name(...) > { > ... > const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx]; > const ga_win_10_0_t *win_10_0_table = ... > ... > while (table->version != NULL) { > ^^^^^^^^^^^^^^^ > while (win_10_0_table->version != NULL) { > ^^^^^^^^^^^^^^^ > > This will simplify maintenance when adding new entries to these > arrays. > > Split WIN_VERSION_MATRIX into WIN_CLIENT_VERSION_MATRIX and > WIN_SERVER_VERSION_MATRIX because multidimensional array must > have bounds for all dimensions except the first. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Message-ID: <20240222152835.72095-3-philmd@linaro.org> > Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> > Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com> > --- > qga/commands-win32.c | 52 +++++++++++++++++++++----------------------- > 1 file changed, 25 insertions(+), 27 deletions(-) > > diff --git a/qga/commands-win32.c b/qga/commands-win32.c > index 79b5a580c9..a830f1494e 100644 > --- a/qga/commands-win32.c > +++ b/qga/commands-win32.c > @@ -2124,45 +2124,42 @@ typedef struct _ga_matrix_lookup_t { > const char *version_id; > } ga_matrix_lookup_t; > > -static const ga_matrix_lookup_t WIN_VERSION_MATRIX[2][7] = { > - { > - /* Desktop editions */ > - { 5, 0, "Microsoft Windows 2000", "2000"}, > - { 5, 1, "Microsoft Windows XP", "xp"}, > - { 6, 0, "Microsoft Windows Vista", "vista"}, > - { 6, 1, "Microsoft Windows 7" "7"}, > - { 6, 2, "Microsoft Windows 8", "8"}, > - { 6, 3, "Microsoft Windows 8.1", "8.1"}, > - { 0, 0, 0} > - },{ > - /* Server editions */ > - { 5, 2, "Microsoft Windows Server 2003", "2003"}, > - { 6, 0, "Microsoft Windows Server 2008", "2008"}, > - { 6, 1, "Microsoft Windows Server 2008 R2", "2008r2"}, > - { 6, 2, "Microsoft Windows Server 2012", "2012"}, > - { 6, 3, "Microsoft Windows Server 2012 R2", "2012r2"}, > - { 0, 0, 0}, > - { 0, 0, 0} > - } > +static const ga_matrix_lookup_t WIN_CLIENT_VERSION_MATRIX[] = { > + { 5, 0, "Microsoft Windows 2000", "2000"}, > + { 5, 1, "Microsoft Windows XP", "xp"}, > + { 6, 0, "Microsoft Windows Vista", "vista"}, > + { 6, 1, "Microsoft Windows 7" "7"}, > + { 6, 2, "Microsoft Windows 8", "8"}, > + { 6, 3, "Microsoft Windows 8.1", "8.1"}, > + { } > +}; > + > +static const ga_matrix_lookup_t WIN_SERVER_VERSION_MATRIX[] = { > + { 5, 2, "Microsoft Windows Server 2003", "2003"}, > + { 6, 0, "Microsoft Windows Server 2008", "2008"}, > + { 6, 1, "Microsoft Windows Server 2008 R2", "2008r2"}, > + { 6, 2, "Microsoft Windows Server 2012", "2012"}, > + { 6, 3, "Microsoft Windows Server 2012 R2", "2012r2"}, > + { }, > }; > > typedef struct _ga_win_10_0_t { > int first_build; > - const char *version; > - const char *version_id; > + char const *version; > + char const *version_id; > } ga_win_10_0_t; > > -static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[4] = { > +static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[] = { > {14393, "Microsoft Windows Server 2016", "2016"}, > {17763, "Microsoft Windows Server 2019", "2019"}, > {20344, "Microsoft Windows Server 2022", "2022"}, > - {0, 0} > + { } > }; > > -static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[3] = { > +static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[] = { > {10240, "Microsoft Windows 10", "10"}, > {22000, "Microsoft Windows 11", "11"}, > - {0, 0} > + { } > }; > > static void ga_get_win_version(RTL_OSVERSIONINFOEXW *info, Error **errp) > @@ -2191,7 +2188,8 @@ static char *ga_get_win_name(const OSVERSIONINFOEXW *os_version, bool id) > DWORD minor = os_version->dwMinorVersion; > DWORD build = os_version->dwBuildNumber; > int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION); > - const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx]; > + const ga_matrix_lookup_t *table = tbl_idx ? > + WIN_SERVER_VERSION_MATRIX : WIN_CLIENT_VERSION_MATRIX; > const ga_win_10_0_t *win_10_0_table = tbl_idx ? > WIN_10_0_SERVER_VERSION_MATRIX : WIN_10_0_CLIENT_VERSION_MATRIX; > const ga_win_10_0_t *win_10_0_version = NULL; > -- > 2.44.0 > Reviewed-by: Yan Vugenfirer <yvugenfi@redhat.com>
© 2016 - 2024 Red Hat, Inc.