diff options
-rw-r--r-- | libappstream-glib/as-require.c | 29 | ||||
-rw-r--r-- | libappstream-glib/as-require.h | 2 | ||||
-rw-r--r-- | libappstream-glib/as-self-test.c | 4 |
3 files changed, 28 insertions, 7 deletions
diff --git a/libappstream-glib/as-require.c b/libappstream-glib/as-require.c index 64bca14..1f66a5b 100644 --- a/libappstream-glib/as-require.c +++ b/libappstream-glib/as-require.c @@ -32,6 +32,8 @@ #include "config.h" +#include <fnmatch.h> + #include "as-require-private.h" #include "as-node-private.h" #include "as-ref-string.h" @@ -142,6 +144,10 @@ as_require_compare_from_string (const gchar *compare) return AS_REQUIRE_COMPARE_GE; if (g_strcmp0 (compare, "le") == 0) return AS_REQUIRE_COMPARE_LE; + if (g_strcmp0 (compare, "glob") == 0) + return AS_REQUIRE_COMPARE_GLOB; + if (g_strcmp0 (compare, "regex") == 0) + return AS_REQUIRE_COMPARE_REGEX; return AS_REQUIRE_COMPARE_UNKNOWN; } @@ -170,6 +176,10 @@ as_require_compare_to_string (AsRequireCompare compare) return "ge"; if (compare == AS_REQUIRE_COMPARE_LE) return "le"; + if (compare == AS_REQUIRE_COMPARE_GLOB) + return "glob"; + if (compare == AS_REQUIRE_COMPARE_REGEX) + return "regex"; return NULL; } @@ -328,27 +338,32 @@ as_require_version_compare (AsRequire *require, GError **error) { AsRequirePrivate *priv = GET_PRIVATE (require); - gint tmp = as_utils_vercmp (version, priv->version); gboolean ret = FALSE; switch (priv->compare) { case AS_REQUIRE_COMPARE_EQ: - ret = tmp == 0; + ret = as_utils_vercmp (version, priv->version) == 0; break; case AS_REQUIRE_COMPARE_NE: - ret = tmp != 0; + ret = as_utils_vercmp (version, priv->version) != 0; break; case AS_REQUIRE_COMPARE_LT: - ret = tmp < 0; + ret = as_utils_vercmp (version, priv->version) < 0; break; case AS_REQUIRE_COMPARE_GT: - ret = tmp > 0; + ret = as_utils_vercmp (version, priv->version) > 0; break; case AS_REQUIRE_COMPARE_LE: - ret = tmp <= 0; + ret = as_utils_vercmp (version, priv->version) <= 0; break; case AS_REQUIRE_COMPARE_GE: - ret = tmp >= 0; + ret = as_utils_vercmp (version, priv->version) >= 0; + break; + case AS_REQUIRE_COMPARE_GLOB: + ret = fnmatch (version, priv->version, 0) == 0; + break; + case AS_REQUIRE_COMPARE_REGEX: + ret = g_regex_match_simple (version, priv->version, 0, 0); break; default: break; diff --git a/libappstream-glib/as-require.h b/libappstream-glib/as-require.h index 92a48b5..8dc16ec 100644 --- a/libappstream-glib/as-require.h +++ b/libappstream-glib/as-require.h @@ -83,6 +83,8 @@ typedef enum { AS_REQUIRE_COMPARE_GT, AS_REQUIRE_COMPARE_LE, AS_REQUIRE_COMPARE_GE, + AS_REQUIRE_COMPARE_GLOB, + AS_REQUIRE_COMPARE_REGEX, /*< private >*/ AS_REQUIRE_COMPARE_LAST } AsRequireCompare; diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c index 4429b0f..d54ec54 100644 --- a/libappstream-glib/as-self-test.c +++ b/libappstream-glib/as-self-test.c @@ -1313,6 +1313,10 @@ as_test_require_func (void) g_assert (as_require_version_compare (require, "0.1.1", NULL)); as_require_set_compare (require, AS_REQUIRE_COMPARE_LE); g_assert (as_require_version_compare (require, "0.1.2", NULL)); + as_require_set_compare (require, AS_REQUIRE_COMPARE_GLOB); + g_assert (as_require_version_compare (require, "0.?.*", NULL)); + as_require_set_compare (require, AS_REQUIRE_COMPARE_REGEX); + g_assert (as_require_version_compare (require, "0.1.[0-9]", NULL)); } static void |