Message ID | 20240304134532.28506-3-kkostiuk@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | [v4,1/3] qga/commands-win32: Declare const qualifier before type | expand |
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>
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;