|
|
|
@ -2953,23 +2953,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];
|
|
|
|
|
}
|
|
|
|
|