From 89b431f60fd4d0a91ac120fbb78641f887671606 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 30 Jun 2012 21:17:44 +0900 Subject: [PATCH] curl: Added runtime version check for libmetalink --- src/tool_getparam.c | 16 +++++++++++++++- src/tool_metalink.h | 11 +++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 4bdf0a59d..c9c6198ff 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -824,7 +824,21 @@ ParameterError getparameter(char *flag, /* f or -long-flag */ case 'J': /* --metalink */ { #ifdef USE_METALINK - config->use_metalink = toggle; + int major, minor, patch; + metalink_get_version(&major, &minor, &patch); + if((major*10000)+(minor*100)+patch < CURL_REQ_LIBMETALINK_VERS) { + warnf(config, + "--metalink option cannot be used because the version of " + "the linked libmetalink library is too old. " + "Required: %d.%d.%d, found %d.%d.%d\n", + CURL_REQ_LIBMETALINK_MAJOR, + CURL_REQ_LIBMETALINK_MINOR, + CURL_REQ_LIBMETALINK_PATCH, + major, minor, patch); + return PARAM_BAD_USE; + } + else + config->use_metalink = toggle; #else warnf(config, "--metalink option is ignored because the binary is " "built without the Metalink support.\n"); diff --git a/src/tool_metalink.h b/src/tool_metalink.h index 42ad28a4b..49a6e64b7 100644 --- a/src/tool_metalink.h +++ b/src/tool_metalink.h @@ -78,6 +78,17 @@ typedef struct metalinkfile { #ifdef USE_METALINK +/* + * curl requires libmetalink 0.1.0 or newer + */ +#define CURL_REQ_LIBMETALINK_MAJOR 0 +#define CURL_REQ_LIBMETALINK_MINOR 1 +#define CURL_REQ_LIBMETALINK_PATCH 0 + +#define CURL_REQ_LIBMETALINK_VERS ((CURL_REQ_LIBMETALINK_MAJOR * 10000) + \ + (CURL_REQ_LIBMETALINK_MINOR * 100) + \ + CURL_REQ_LIBMETALINK_PATCH) + extern const digest_params MD5_DIGEST_PARAMS[1]; extern const digest_params SHA1_DIGEST_PARAMS[1]; extern const digest_params SHA256_DIGEST_PARAMS[1];