aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-02-16 22:30:01 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-02-20 22:58:04 +0000
commit08c3f380313a1262729bd0dbbbf5a85b6f695e81 (patch)
tree36af4fd723a036e7abca08e268fac691437b796c /src/common
parentdns_utils: factor TXT record loading code from checkpoint code (diff)
downloadmonero-08c3f380313a1262729bd0dbbbf5a85b6f695e81.tar.xz
util: add a vercmp function to compare version numbers
It is simple, supports simple x.y.z type numeric versions, and does not attempt any kind of validation
Diffstat (limited to 'src/common')
-rw-r--r--src/common/util.cpp17
-rw-r--r--src/common/util.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/src/common/util.cpp b/src/common/util.cpp
index bfcf86bc6..2741497d6 100644
--- a/src/common/util.cpp
+++ b/src/common/util.cpp
@@ -568,4 +568,21 @@ std::string get_nix_version_display_string()
MDEBUG("Address '" << address << "' is not local");
return false;
}
+ int vercmp(const char *v0, const char *v1)
+ {
+ std::vector<std::string> f0, f1;
+ boost::split(f0, v0, boost::is_any_of("."));
+ boost::split(f1, v1, boost::is_any_of("."));
+ while (f0.size() < f1.size())
+ f0.push_back("0");
+ while (f1.size() < f0.size())
+ f1.push_back("0");
+ for (size_t i = 0; i < f0.size(); ++i) {
+ int f0i = atoi(f0[i].c_str()), f1i = atoi(f1[i].c_str());
+ int n = f0i - f1i;
+ if (n)
+ return n;
+ }
+ return 0;
+ }
}
diff --git a/src/common/util.h b/src/common/util.h
index c2ffc44ca..bef4b6202 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -183,4 +183,5 @@ namespace tools
unsigned get_max_concurrency();
bool is_local_address(const std::string &address);
+ int vercmp(const char *v0, const char *v1); // returns < 0, 0, > 0, similar to strcmp, but more human friendly than lexical - does not attempt to validate
}