pluginfeature: improve version check
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 10 Sep 2009 09:41:56 +0000 (11:41 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 10 Sep 2009 09:54:01 +0000 (11:54 +0200)
Also parse the nano of the version and assume that X.Y.Z-1.1 >= X.Y.Z
With this change we can also check development versions against the version of
the upcomming release.

gst/gstpluginfeature.c

index a38122a..3065f53 100644 (file)
@@ -290,12 +290,16 @@ gst_plugin_feature_check_version (GstPluginFeature * feature,
 
   if (plugin) {
     const gchar *ver_str;
-    guint major, minor, micro;
+    guint major, minor, micro, nano;
+    gint nscan;
 
     ver_str = gst_plugin_get_version (plugin);
     g_return_val_if_fail (ver_str != NULL, FALSE);
 
-    if (sscanf (ver_str, "%u.%u.%u", &major, &minor, &micro) == 3) {
+    nscan = sscanf (ver_str, "%u.%u.%u.%u", &major, &minor, &micro, &nano);
+    GST_DEBUG ("version string '%s' parsed to %d values", ver_str, nscan);
+
+    if (nscan >= 3) {
       if (major > min_major)
         ret = TRUE;
       else if (major < min_major)
@@ -306,6 +310,10 @@ gst_plugin_feature_check_version (GstPluginFeature * feature,
         ret = FALSE;
       else if (micro > min_micro)
         ret = TRUE;
+      /* micro is 1 smaller but we have a nano version, this is the upcomming
+       * release of the requested version and we're ok then */
+      else if (nscan == 4 && nano > 0 && (micro + 1 == min_micro))
+        ret = TRUE;
       else
         ret = (micro == min_micro);