summaryrefslogtreecommitdiff
path: root/main/utils.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2015-12-14 15:25:02 -0600
committerRichard Mudgett <rmudgett@digium.com>2015-12-14 16:18:30 -0600
commit36097a185db00230a89f019b9b8ee2d478cc6665 (patch)
treed970f376e0214b11f9ca921456860ea5cdec84b5 /main/utils.c
parent77ac79b175437f3c37f4980cdea6d240a1b26335 (diff)
Fix sscanf() format string type mismatch.
ASTERISK-25615 Reported by: George Joseph Change-Id: Ieff35307254ca193f3d473cff2e396ca57c7ce0b
Diffstat (limited to 'main/utils.c')
-rw-r--r--main/utils.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/main/utils.c b/main/utils.c
index f06b16cdc..3a8d46ae4 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -2958,23 +2958,26 @@ int ast_file_is_readable(const char *filename)
int ast_compare_versions(const char *version1, const char *version2)
{
- u_int64_t major[2] = { 0 };
- u_int64_t minor[2] = { 0 };
- u_int64_t patch[2] = { 0 };
- u_int64_t extra[2] = { 0 };
- u_int64_t v1, v2;
-
- sscanf(version1, "%lu.%lu.%lu.%lu", &major[0], &minor[0], &patch[0], &extra[0]);
- sscanf(version2, "%lu.%lu.%lu.%lu", &major[1], &minor[1], &patch[1], &extra[1]);
+ unsigned int major[2] = { 0 };
+ unsigned int minor[2] = { 0 };
+ unsigned int patch[2] = { 0 };
+ unsigned int extra[2] = { 0 };
+ int res;
- v1 = major[0] << 48 | minor[0] << 32 | patch[0] << 16 | extra[0];
- v2 = major[1] << 48 | minor[1] << 32 | patch[1] << 16 | extra[1];
+ sscanf(version1, "%u.%u.%u.%u", &major[0], &minor[0], &patch[0], &extra[0]);
+ sscanf(version2, "%u.%u.%u.%u", &major[1], &minor[1], &patch[1], &extra[1]);
- if (v1 < v2) {
- return -1;
- } else if (v1 > v2) {
- return 1;
- } else {
- return 0;
+ res = major[0] - major[1];
+ if (res) {
+ return res;
+ }
+ res = minor[0] - minor[1];
+ if (res) {
+ return res;
+ }
+ res = patch[0] - patch[1];
+ if (res) {
+ return res;
}
+ return extra[0] - extra[1];
}