diff options
Diffstat (limited to 'Source/CTest/Curl/version.c')
-rw-r--r-- | Source/CTest/Curl/version.c | 155 |
1 files changed, 103 insertions, 52 deletions
diff --git a/Source/CTest/Curl/version.c b/Source/CTest/Curl/version.c index f442b16..510c20a 100644 --- a/Source/CTest/Curl/version.c +++ b/Source/CTest/Curl/version.c @@ -1,16 +1,16 @@ /*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. - * + * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. @@ -29,8 +29,19 @@ #include <curl/curl.h> #include "urldata.h" +#define _MPRINTF_REPLACE /* use the internal *printf() functions */ +#include <curl/mprintf.h> + +#ifdef USE_ARES +#include <ares_version.h> +#endif + +#ifdef USE_LIBIDN +#include <stringprep.h> +#endif + #ifdef USE_SSLEAY -static void getssl_version(char *ptr, long *num) +static int getssl_version(char *ptr, size_t left, long *num) { #if (SSLEAY_VERSION_NUMBER >= 0x905000) @@ -39,33 +50,33 @@ static void getssl_version(char *ptr, long *num) unsigned long ssleay_value; sub[1]='\0'; ssleay_value=SSLeay(); - *num = ssleay_value; + *num = (long)ssleay_value; if(ssleay_value < 0x906000) { ssleay_value=SSLEAY_VERSION_NUMBER; sub[0]='\0'; } else { if(ssleay_value&0xff0) { - sub[0]=((ssleay_value>>4)&0xff) + 'a' -1; + sub[0]=(char)((ssleay_value>>4)&0xff) + 'a' -1; } else sub[0]='\0'; } - sprintf(ptr, " OpenSSL/%lx.%lx.%lx%s", - (ssleay_value>>28)&0xf, - (ssleay_value>>20)&0xff, - (ssleay_value>>12)&0xff, - sub); + return snprintf(ptr, left, " OpenSSL/%lx.%lx.%lx%s", + (ssleay_value>>28)&0xf, + (ssleay_value>>20)&0xff, + (ssleay_value>>12)&0xff, + sub); } #else *num = SSLEAY_VERSION_NUMBER; #if (SSLEAY_VERSION_NUMBER >= 0x900000) - sprintf(ptr, " OpenSSL/%lx.%lx.%lx", - (SSLEAY_VERSION_NUMBER>>28)&0xff, - (SSLEAY_VERSION_NUMBER>>20)&0xff, - (SSLEAY_VERSION_NUMBER>>12)&0xf); + return snprintf(ptr, left, " OpenSSL/%lx.%lx.%lx", + (SSLEAY_VERSION_NUMBER>>28)&0xff, + (SSLEAY_VERSION_NUMBER>>20)&0xff, + (SSLEAY_VERSION_NUMBER>>12)&0xf); #else { char sub[2]; @@ -76,10 +87,10 @@ static void getssl_version(char *ptr, long *num) else sub[0]='\0'; - sprintf(ptr, " SSL/%x.%x.%x%s", - (SSLEAY_VERSION_NUMBER>>12)&0xff, - (SSLEAY_VERSION_NUMBER>>8)&0xf, - (SSLEAY_VERSION_NUMBER>>4)&0xf, sub); + return snprintf(ptr, left, " SSL/%x.%x.%x%s", + (SSLEAY_VERSION_NUMBER>>12)&0xff, + (SSLEAY_VERSION_NUMBER>>8)&0xf, + (SSLEAY_VERSION_NUMBER>>4)&0xf, sub); } #endif #endif @@ -90,31 +101,46 @@ static void getssl_version(char *ptr, long *num) char *curl_version(void) { static char version[200]; - char *ptr; - long num=0; - strcpy(version, LIBCURL_NAME "/" LIBCURL_VERSION ); - ptr=strchr(version, '\0'); + char *ptr=version; + /* to prevent compier warnings, we only declare len if we have code + that uses it */ +#if defined(USE_SSLEAY) || defined(HAVE_LIBZ) || defined(USE_ARES) || \ + defined(USE_LIBIDN) + int len; +#endif + size_t left = sizeof(version); + strcpy(ptr, LIBCURL_NAME "/" LIBCURL_VERSION ); + ptr=strchr(ptr, '\0'); + left -= strlen(ptr); #ifdef USE_SSLEAY - getssl_version(ptr, &num); - ptr=strchr(version, '\0'); -#else - (void)num; /* no compiler warning please */ + { + long num; + len = getssl_version(ptr, left, &num); + left -= len; + ptr += len; + } #endif -#ifdef KRB4 - sprintf(ptr, " krb4"); - ptr += strlen(ptr); +#ifdef HAVE_LIBZ + len = snprintf(ptr, left, " zlib/%s", zlibVersion()); + left -= len; + ptr += len; #endif -#ifdef ENABLE_IPV6 - sprintf(ptr, " ipv6"); - ptr += strlen(ptr); +#ifdef USE_ARES + /* this function is only present in c-ares, not in the original ares */ + len = snprintf(ptr, left, " c-ares/%s", ares_version(NULL)); + left -= len; + ptr += len; #endif -#ifdef HAVE_LIBZ - sprintf(ptr, " zlib/%s", zlibVersion()); - ptr += strlen(ptr); +#ifdef USE_LIBIDN + if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) { + len = snprintf(ptr, left, " libidn/%s", stringprep_check_version(NULL)); + left -= len; + ptr += len; + } #endif - (void)ptr; + return version; } @@ -155,7 +181,7 @@ static const char *protocols[] = { }; static curl_version_info_data version_info = { - CURLVERSION_FIRST, + CURLVERSION_NOW, LIBCURL_VERSION, LIBCURL_VERSION_NUM, OS, /* as found by configure or set by hand at build-time */ @@ -163,20 +189,39 @@ static curl_version_info_data version_info = { #ifdef ENABLE_IPV6 | CURL_VERSION_IPV6 #endif -#ifdef KRB4 +#ifdef HAVE_KRB4 | CURL_VERSION_KERBEROS4 #endif #ifdef USE_SSLEAY | CURL_VERSION_SSL + | CURL_VERSION_NTLM /* since this requires OpenSSL */ #endif #ifdef HAVE_LIBZ | CURL_VERSION_LIBZ #endif +#ifdef HAVE_GSSAPI + | CURL_VERSION_GSSNEGOTIATE +#endif +#ifdef CURLDEBUG + | CURL_VERSION_DEBUG +#endif +#ifdef USE_ARES + | CURL_VERSION_ASYNCHDNS +#endif +#ifdef HAVE_SPNEGO + | CURL_VERSION_SPNEGO +#endif +#if defined(ENABLE_64BIT) && (SIZEOF_CURL_OFF_T > 4) + | CURL_VERSION_LARGEFILE +#endif , NULL, /* ssl_version */ 0, /* ssl_version_num */ NULL, /* zlib_version */ - protocols + protocols, + NULL, /* c-ares version */ + 0, /* c-ares version numerical */ + NULL, /* libidn version */ }; curl_version_info_data *curl_version_info(CURLversion stamp) @@ -184,7 +229,7 @@ curl_version_info_data *curl_version_info(CURLversion stamp) #ifdef USE_SSLEAY static char ssl_buffer[80]; long num; - getssl_version(ssl_buffer, &num); + getssl_version(ssl_buffer, sizeof(ssl_buffer), &num); version_info.ssl_version = ssl_buffer; version_info.ssl_version_num = num; @@ -195,15 +240,21 @@ curl_version_info_data *curl_version_info(CURLversion stamp) version_info.libz_version = zlibVersion(); /* libz left NULL if non-existing */ #endif +#ifdef USE_ARES + { + int aresnum; + version_info.ares = ares_version(&aresnum); + version_info.ares_num = aresnum; + } +#endif +#ifdef USE_LIBIDN + /* This returns a version string if we use the given version or later, + otherwise it returns NULL */ + version_info.libidn = stringprep_check_version(LIBIDN_REQUIRED_VERSION); + if(version_info.libidn) + version_info.features |= CURL_VERSION_IDN; +#endif (void)stamp; /* avoid compiler warnings, we don't use this */ return &version_info; } - -/* - * local variables: - * eval: (load-file "../curl-mode.el") - * end: - * vim600: fdm=marker - * vim: et sw=2 ts=2 sts=2 tw=78 - */ |