diff options
Diffstat (limited to 'cpp/src/IceGrid/Util.cpp')
-rw-r--r-- | cpp/src/IceGrid/Util.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/cpp/src/IceGrid/Util.cpp b/cpp/src/IceGrid/Util.cpp index 895dc8cbde7..1952592285e 100644 --- a/cpp/src/IceGrid/Util.cpp +++ b/cpp/src/IceGrid/Util.cpp @@ -83,15 +83,39 @@ IceGrid::createProperty(const string& name, const string& value) } int -IceGrid::getMMVersion(const string& version) +IceGrid::getMMVersion(const string& o) { + // + // Strip the version + // + string::size_type beg = o.find_first_not_of(' '); + string::size_type end = o.find_last_not_of(' '); + string version = o.substr(beg == string::npos ? 0 : beg, end == string::npos ? o.length() - 1 : end - beg + 1); + string::size_type minorPos = version.find('.'); - if(minorPos == string::npos || minorPos >= version.size()) + string::size_type patchPos = version.find('.', minorPos + 1); + + if(minorPos != 1 && minorPos != 2) { return -1; } - string::size_type patchPos = version.find('.', minorPos + 1); - + + if(patchPos != string::npos) + { + if((minorPos == 1 && patchPos != 3 && patchPos != 4) || (minorPos == 2 && patchPos != 4 && patchPos != 5)) + { + return -1; + } + else if((version.size() - patchPos - 1) > 2) + { + return -1; + } + } + else if((version.size() - minorPos - 1) > 2) + { + return -1; + } + int v, ver; istringstream major(version.substr(0, minorPos)); |