From 40d962b43a183070ba8602cac1e83f2292ebf2c3 Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Thu, 15 Nov 2018 10:31:22 +0100 Subject: tests,json: Move version check into t-json * tests/gpg/t-support.h (check_gpg_version, compare_versions), (parse_version_string, parse_version_number): Remove version check code. * tests/json/t-json.c (check_gpg_version, compare_versions), (parse_version_string, parse_version_number): Add. -- t-support header was not a good place for this. It should go into a library e.g. gpgrt in the future. For now we can keep it close to where it is needed. --- tests/gpg/t-support.h | 103 -------------------------------------------------- 1 file changed, 103 deletions(-) (limited to 'tests/gpg/t-support.h') diff --git a/tests/gpg/t-support.h b/tests/gpg/t-support.h index a1536c18..b6ad515a 100644 --- a/tests/gpg/t-support.h +++ b/tests/gpg/t-support.h @@ -216,106 +216,3 @@ print_import_result (gpgme_import_result_t r) r->not_imported, r->skipped_v3_keys); } - - -/* Read the next number in the version string STR and return it in - *NUMBER. Return a pointer to the tail of STR after parsing, or - *NULL if the version string was invalid. */ -static const char * -parse_version_number (const char *str, int *number) -{ -#define MAXVAL ((INT_MAX - 10) / 10) - int val = 0; - - /* Leading zeros are not allowed. */ - if (*str == '0' && isdigit(str[1])) - return NULL; - - while (isdigit (*str) && val <= MAXVAL) - { - val *= 10; - val += *(str++) - '0'; - } - *number = val; - return val > MAXVAL ? NULL : str; -} - - -/* Parse the version string STR in the format MAJOR.MINOR.MICRO (for - example, 9.3.2) and return the components in MAJOR, MINOR and MICRO - as integers. The function returns the tail of the string that - follows the version number. This might be the empty string if there - is nothing following the version number, or a patchlevel. The - function returns NULL if the version string is not valid. */ -static const char * -parse_version_string (const char *str, int *major, int *minor, int *micro) -{ - str = parse_version_number (str, major); - if (!str || *str != '.') - return NULL; - str++; - - str = parse_version_number (str, minor); - if (!str || *str != '.') - return NULL; - str++; - - str = parse_version_number (str, micro); - if (!str) - return NULL; - - /* A patchlevel might follow. */ - return str; -} - - -/* Return true if MY_VERSION is at least REQ_VERSION, and false - otherwise. */ -static int -compare_versions (const char *my_version, - const char *rq_version) -{ - int my_major, my_minor, my_micro; - int rq_major, rq_minor, rq_micro; - const char *my_plvl, *rq_plvl; - - if (!rq_version) - return 1; - if (!my_version) - return 0; - - my_plvl = parse_version_string (my_version, &my_major, &my_minor, &my_micro); - if (!my_plvl) - return 0; - - rq_plvl = parse_version_string (rq_version, &rq_major, &rq_minor, &rq_micro); - if (!rq_plvl) - return 0; - - if (my_major > rq_major - || (my_major == rq_major && my_minor > rq_minor) - || (my_major == rq_major && my_minor == rq_minor - && my_micro > rq_micro) - || (my_major == rq_major && my_minor == rq_minor - && my_micro == rq_micro && strcmp (my_plvl, rq_plvl) >= 0)) - return 1; - - return 0; -} - -/* Return true if we have the required gpg version. */ -static int -check_gpg_version (const char *req_version) -{ - gpgme_engine_info_t engine_info; - init_gpgme (GPGME_PROTOCOL_OpenPGP); - - fail_if_err (gpgme_get_engine_info (&engine_info)); - for (; engine_info; engine_info = engine_info->next) - if (engine_info->protocol == GPGME_PROTOCOL_OpenPGP) - break; - - test (engine_info); - - return compare_versions (engine_info->version, req_version); -} -- cgit v1.2.3