diff options
Diffstat (limited to 'main/utils.c')
-rw-r--r-- | main/utils.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/main/utils.c b/main/utils.c index 497352ef1..f06b16cdc 100644 --- a/main/utils.c +++ b/main/utils.c @@ -2955,3 +2955,26 @@ int ast_file_is_readable(const char *filename) return 1; #endif } + +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]); + + v1 = major[0] << 48 | minor[0] << 32 | patch[0] << 16 | extra[0]; + v2 = major[1] << 48 | minor[1] << 32 | patch[1] << 16 | extra[1]; + + if (v1 < v2) { + return -1; + } else if (v1 > v2) { + return 1; + } else { + return 0; + } +} |