diff options
author | Kalev Lember <klember@redhat.com> | 2019-01-04 14:21:18 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2019-02-06 12:16:48 +0000 |
commit | a2edcbe958fa6de2e7c325e70ed8e58f478f1719 (patch) | |
tree | d7513f38a1b4a14e749edcb31f8ff1f2b1e6ed9a /libappstream-glib | |
parent | 8ac4f05f7f84af226805b86b0e805e5714ffd3ab (diff) | |
download | appstream-glib-a2edcbe958fa6de2e7c325e70ed8e58f478f1719.tar.gz |
utils: trivial: Split out an internal function
Diffstat (limited to 'libappstream-glib')
-rw-r--r-- | libappstream-glib/as-utils.c | 73 |
1 files changed, 40 insertions, 33 deletions
diff --git a/libappstream-glib/as-utils.c b/libappstream-glib/as-utils.c index 85742f2..e475c65 100644 --- a/libappstream-glib/as-utils.c +++ b/libappstream-glib/as-utils.c @@ -1387,45 +1387,17 @@ as_utils_vercmp_chunk (const gchar *str1, const gchar *str2) return as_utils_vercmp_char (str1[i], str2[i]); } -/** - * as_utils_vercmp_full: - * @version_a: the release version, e.g. 1.2.3 - * @version_b: the release version, e.g. 1.2.3.1 - * @flags: some #AsVersionCompareFlag - * - * Compares version numbers for sorting. - * - * Returns: -1 if a < b, +1 if a > b, 0 if they are equal, and %G_MAXINT on error - * - * Since: 0.7.15 - */ -gint -as_utils_vercmp_full (const gchar *version_a, - const gchar *version_b, - AsVersionCompareFlag flags) +static gint +as_utils_vercmp_internal (const gchar *version_a, + const gchar *version_b) { guint longest_split; g_auto(GStrv) split_a = NULL; g_auto(GStrv) split_b = NULL; - /* sanity check */ - if (version_a == NULL || version_b == NULL) - return G_MAXINT; - - /* optimisation */ - if (g_strcmp0 (version_a, version_b) == 0) - return 0; + split_a = g_strsplit (version_a, ".", -1); + split_b = g_strsplit (version_b, ".", -1); - /* split into sections, and try to parse */ - if (flags & AS_VERSION_COMPARE_FLAG_USE_HEURISTICS) { - g_autofree gchar *str_a = as_utils_version_parse (version_a); - g_autofree gchar *str_b = as_utils_version_parse (version_b); - split_a = g_strsplit (str_a, ".", -1); - split_b = g_strsplit (str_b, ".", -1); - } else { - split_a = g_strsplit (version_a, ".", -1); - split_b = g_strsplit (version_b, ".", -1); - } longest_split = MAX (g_strv_length (split_a), g_strv_length (split_b)); for (guint i = 0; i < longest_split; i++) { gchar *endptr_a = NULL; @@ -1463,6 +1435,41 @@ as_utils_vercmp_full (const gchar *version_a, } /** + * as_utils_vercmp_full: + * @version_a: the release version, e.g. 1.2.3 + * @version_b: the release version, e.g. 1.2.3.1 + * @flags: some #AsVersionCompareFlag + * + * Compares version numbers for sorting. + * + * Returns: -1 if a < b, +1 if a > b, 0 if they are equal, and %G_MAXINT on error + * + * Since: 0.7.15 + */ +gint +as_utils_vercmp_full (const gchar *version_a, + const gchar *version_b, + AsVersionCompareFlag flags) +{ + /* sanity check */ + if (version_a == NULL || version_b == NULL) + return G_MAXINT; + + /* optimisation */ + if (g_strcmp0 (version_a, version_b) == 0) + return 0; + + if (flags & AS_VERSION_COMPARE_FLAG_USE_HEURISTICS) { + /* split into sections, and try to parse */ + g_autofree gchar *str_a = as_utils_version_parse (version_a); + g_autofree gchar *str_b = as_utils_version_parse (version_b); + return as_utils_vercmp_internal (str_a, str_b); + } else { + return as_utils_vercmp_internal (version_a, version_b); + } +} + +/** * as_utils_vercmp: * @version_a: the release version, e.g. 1.2.3 * @version_b: the release version, e.g. 1.2.3.1 |