mirror of
https://gitlab.com/virt-viewer/virt-viewer.git
synced 2025-01-07 17:17:45 +03:00
util: Replace virt_viewer_compare_version with _compare_buildid
This allows us to do a more accurate version check if the .vv file producer wants to allow builds newer than x.y-z because they contain an important bug fix.
This commit is contained in:
parent
809d097cfd
commit
e2df5a739a
@ -141,7 +141,8 @@ protocol:
|
|||||||
If remote-viewer version number isn't greater or equal to the required
|
If remote-viewer version number isn't greater or equal to the required
|
||||||
version, an error is raised with the expected version.
|
version, an error is raised with the expected version.
|
||||||
|
|
||||||
The version format accepted is a list of integers separated by '.'.
|
The version format accepted is a list of integers separated by '.'. It can
|
||||||
|
be followed by a dash '-' and an additional build number with the same format.
|
||||||
|
|
||||||
Version comparison is done by comparing each integer from the list one by
|
Version comparison is done by comparing each integer from the list one by
|
||||||
one. If any of the component is not a number, the version comparison will fail
|
one. If any of the component is not a number, the version comparison will fail
|
||||||
|
@ -796,8 +796,7 @@ virt_viewer_file_check_min_version(VirtViewerFile *self, GError **error)
|
|||||||
if (min_version == NULL) {
|
if (min_version == NULL) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
version_cmp = virt_viewer_compare_buildid(min_version, PACKAGE_VERSION BUILDID);
|
||||||
version_cmp = virt_viewer_compare_version(min_version, PACKAGE_VERSION);
|
|
||||||
|
|
||||||
if (version_cmp > 0) {
|
if (version_cmp > 0) {
|
||||||
g_set_error(error,
|
g_set_error(error,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Virt Viewer: A virtual machine console viewer
|
* Virt Viewer: A virtual machine console viewer
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007-2012 Red Hat, Inc.
|
* Copyright (C) 2007-2015 Red Hat, Inc.
|
||||||
* Copyright (C) 2009-2012 Daniel P. Berrange
|
* Copyright (C) 2009-2012 Daniel P. Berrange
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -439,25 +439,24 @@ spice_hotkey_to_gtk_accelerator(const gchar *key)
|
|||||||
return accel;
|
return accel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static gboolean str_is_empty(const gchar *str)
|
||||||
* virt_viewer_compare_version:
|
{
|
||||||
* @s1: a version-like string
|
return ((str == NULL) || (str[0] == '\0'));
|
||||||
* @s2: a version-like string
|
}
|
||||||
*
|
|
||||||
* Compare two version-like strings: 1.1 > 1.0, 1.0.1 > 1.0, 1.10 > 1.7...
|
static gint
|
||||||
*
|
|
||||||
* String suffix (1.0rc1 etc) are not accepted, and will return 0.
|
|
||||||
*
|
|
||||||
* Returns: negative value if s1 < s2; zero if s1 = s2; positive value if s1 > s2.
|
|
||||||
**/
|
|
||||||
gint
|
|
||||||
virt_viewer_compare_version(const gchar *s1, const gchar *s2)
|
virt_viewer_compare_version(const gchar *s1, const gchar *s2)
|
||||||
{
|
{
|
||||||
gint i, retval = 0;
|
gint i, retval = 0;
|
||||||
gchar **v1, **v2;
|
gchar **v1, **v2;
|
||||||
|
|
||||||
g_return_val_if_fail(s1 != NULL, 0);
|
if (str_is_empty(s1) && str_is_empty(s2)) {
|
||||||
g_return_val_if_fail(s2 != NULL, 0);
|
return 0;
|
||||||
|
} else if (str_is_empty(s1)) {
|
||||||
|
return -1;
|
||||||
|
} else if (str_is_empty(s2)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
v1 = g_strsplit(s1, ".", -1);
|
v1 = g_strsplit(s1, ".", -1);
|
||||||
v2 = g_strsplit(s2, ".", -1);
|
v2 = g_strsplit(s2, ".", -1);
|
||||||
@ -473,7 +472,7 @@ virt_viewer_compare_version(const gchar *s1, const gchar *s2)
|
|||||||
|
|
||||||
g_return_val_if_fail(e1 && e2, 0);
|
g_return_val_if_fail(e1 && e2, 0);
|
||||||
if (*e1 || *e2) {
|
if (*e1 || *e2) {
|
||||||
g_warning("the version string contains suffix");
|
g_warning("the version string contains a suffix");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -489,6 +488,48 @@ end:
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virt_viewer_compare_buildid:
|
||||||
|
* @s1: a version-like string
|
||||||
|
* @s2: a version-like string
|
||||||
|
*
|
||||||
|
* Compare two buildid strings: 1.1-1 > 1.0-1, 1.0-2 > 1.0-1, 1.10 > 1.7...
|
||||||
|
*
|
||||||
|
* String suffix (1.0rc1 etc) are not accepted, and will return 0.
|
||||||
|
*
|
||||||
|
* Returns: negative value if s1 < s2; zero if s1 = s2; positive value if s1 > s2.
|
||||||
|
**/
|
||||||
|
gint
|
||||||
|
virt_viewer_compare_buildid(const gchar *s1, const gchar *s2)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
GStrv split1 = NULL;
|
||||||
|
GStrv split2 = NULL;
|
||||||
|
|
||||||
|
split1 = g_strsplit(s1, "-", 2);
|
||||||
|
split2 = g_strsplit(s2, "-", 2);
|
||||||
|
if ((split1 == NULL) || (split2 == NULL)) {
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
/* Compare versions */
|
||||||
|
ret = virt_viewer_compare_version(split1[0], split2[0]);
|
||||||
|
if (ret != 0) {
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if ((split1[0] == NULL) || (split2[0] == NULL)) {
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compare -release */
|
||||||
|
ret = virt_viewer_compare_version(split1[1], split2[1]);
|
||||||
|
|
||||||
|
end:
|
||||||
|
g_strfreev(split1);
|
||||||
|
g_strfreev(split2);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* simple sorting of monitors. Primary sort left-to-right, secondary sort from
|
/* simple sorting of monitors. Primary sort left-to-right, secondary sort from
|
||||||
* top-to-bottom, finally by monitor id */
|
* top-to-bottom, finally by monitor id */
|
||||||
static int
|
static int
|
||||||
|
@ -54,7 +54,7 @@ gulong virt_viewer_signal_connect_object(gpointer instance,
|
|||||||
GConnectFlags connect_flags);
|
GConnectFlags connect_flags);
|
||||||
|
|
||||||
gchar* spice_hotkey_to_gtk_accelerator(const gchar *key);
|
gchar* spice_hotkey_to_gtk_accelerator(const gchar *key);
|
||||||
gint virt_viewer_compare_version(const gchar *s1, const gchar *s2);
|
gint virt_viewer_compare_buildid(const gchar *s1, const gchar *s2);
|
||||||
|
|
||||||
/* monitor alignment */
|
/* monitor alignment */
|
||||||
void virt_viewer_align_monitors_linear(GdkRectangle *displays, guint ndisplays);
|
void virt_viewer_align_monitors_linear(GdkRectangle *displays, guint ndisplays);
|
||||||
|
Loading…
Reference in New Issue
Block a user