[rkward-cvs] SF.net SVN: rkward-code:[4501] trunk/rkward/rkward/rbackend/rksessionvars. cpp

tfry at users.sf.net tfry at users.sf.net
Wed Jan 23 18:42:12 UTC 2013


Revision: 4501
          http://sourceforge.net/p/rkward/code/4501
Author:   tfry
Date:     2013-01-23 18:42:10 +0000 (Wed, 23 Jan 2013)
Log Message:
-----------
Fix version parsing

Modified Paths:
--------------
    trunk/rkward/rkward/rbackend/rksessionvars.cpp

Modified: trunk/rkward/rkward/rbackend/rksessionvars.cpp
===================================================================
--- trunk/rkward/rkward/rbackend/rksessionvars.cpp	2013-01-21 11:11:23 UTC (rev 4500)
+++ trunk/rkward/rkward/rbackend/rksessionvars.cpp	2013-01-23 18:42:10 UTC (rev 4501)
@@ -48,34 +48,38 @@
 	quint32 ret = 0;
 	int pos = -1;
 	int opos = 0;
-	for (int i = 3; i > 0; --i) {
-		++pos;
-		if (!version[pos].isDigit ()) {
-			int val = version.mid (pos, pos - opos).toInt ();
-			if ((val < 0) || (val > 255) || (pos == opos)) {
-				RK_DEBUG (MISC, DL_ERROR, "Invalid version specification '%s'", qPrintable (version));
-				if (val > 255) val = 255;
-				else val = 0;
+	for (int i = 3; i >= 0; --i) {
+		while (1) {
+			++pos;
+			if (!(pos < version.size () && version[pos].isDigit ())) {
+				int val = version.mid (opos, pos - opos).toInt ();
+				if ((val < 0) || (val > 255) || (pos == opos)) {
+					RK_DEBUG (MISC, DL_ERROR, "Invalid version specification '%s'", qPrintable (version));
+					if (val > 255) val = 255;
+					else val = 0;
+				}
+				ret += val << (8 * i);
+				if ((pos < version.size ()) && (version[pos] == '.')) {
+					opos = pos + 1;
+					break;
+				}
+				opos = pos;
+				i = -1;
+				break;
 			}
-			ret += val << (8 * i);
-			if (version[pos] == '.') {
-				opos = pos + 1;
-				continue;
-			}
-			opos = pos;
-			break;
 		}
 	}
 	if (opos < (version.size () - 1)) {
 		if (suffix) *suffix = version.mid (opos);
 		else RK_DEBUG (MISC, DL_WARNING, "Non numeric portion ('%s') of version specification '%s' will be ignored.", qPrintable (version.mid (opos)), qPrintable (version));
 	}
+
 	return ret;
 }
 
 int RKSessionVars::compareRKWardVersion (const QString& version) {
 	if (!rkward_version) {
-		rkward_version = parseVersionString (version, &rkward_version_suffix);
+		rkward_version = parseVersionString (RKWARD_VERSION, &rkward_version_suffix);
 	}
 
 	QString suffix;





More information about the rkward-tracker mailing list