From 9247daf953bb48d19948199feb12b0031f825fa0 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 26 Sep 2002 13:03:22 +0000 Subject: [PATCH] enhanced curl_version_info --- CHANGES | 3 ++ docs/libcurl/Makefile.am | 2 + docs/libcurl/curl_version_info.3 | 81 ++++++++++++++++++++++++++++++++ docs/libcurl/index.html | 68 +++++++++++++-------------- include/curl/curl.h | 16 +++---- lib/version.c | 11 ++++- 6 files changed, 135 insertions(+), 46 deletions(-) create mode 100644 docs/libcurl/curl_version_info.3 diff --git a/CHANGES b/CHANGES index fbe917730..3060d77b9 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,9 @@ Changelog +Daniel (26 Sep 2002) +- Extended curl_version_info() more and wrote a man page for it. + Daniel (25 Sep 2002) - libcurl could leak memory when downloading multiple files using http ranges. diff --git a/docs/libcurl/Makefile.am b/docs/libcurl/Makefile.am index 4e549cb44..3a6c266c0 100644 --- a/docs/libcurl/Makefile.am +++ b/docs/libcurl/Makefile.am @@ -19,6 +19,7 @@ man_MANS = \ curl_slist_append.3 \ curl_slist_free_all.3 \ curl_version.3 \ + curl_version_info.3 \ curl_escape.3 \ curl_unescape.3 \ curl_free.3 \ @@ -53,6 +54,7 @@ HTMLPAGES = \ curl_slist_append.html \ curl_slist_free_all.html \ curl_version.html \ + curl_version_info.html \ curl_escape.html \ curl_unescape.html \ curl_free.html \ diff --git a/docs/libcurl/curl_version_info.3 b/docs/libcurl/curl_version_info.3 new file mode 100644 index 000000000..83becb608 --- /dev/null +++ b/docs/libcurl/curl_version_info.3 @@ -0,0 +1,81 @@ +.\" You can view this file with: +.\" nroff -man [file] +.\" $Id$ +.\" +.TH curl_version_info 3 "25 Sep 2002" "libcurl 7.10" "libcurl Manual" +.SH NAME +curl_version_info - returns run-time libcurl version info +.SH SYNOPSIS +.B #include +.sp +.BI "curl_version_info_data *curl_version_info( );" +.ad +.SH DESCRIPTION +Returns a pointer to a filled in struct with information about various +run-time features in libcurl. + +Applications should use this information to judge if things are possible to do +or not, instead of using compile-time checks, as dynamic/DLL libraries can be +changed independent of applications. + +The curl_version_info_data struct looks like this + +.nf +typedef struct { + const char *version; /* human readable string */ + unsigned int version_num; /* numeric representation */ + const char *host; /* human readable string */ + int features; /* bitmask, see below */ + char *ssl_version; /* human readable string */ + long ssl_version_num; /* number */ + char *libz_version; /* human readable string */ + const char *protocols[]; /* list of protocols */ +} curl_version_info_data; +.fi + +\fIversion\fP is just an ascii string for the libcurl version. + +\fIversion_num\fP is a 6 digit hexadecimal number created like this: <2 digits +major number> | <2 digits minor number> | <2 digits patch number>. Version +7.9.8 is therefore returned as 0x070908. + +\fIhost\fP is an ascii string showing what host information that this libcurl +was built for. As discovered by a configure script or set by the build +environment. + +\fIfeatures\fP can have none, one or more bits set, and the currently defined +bits are: +.TP 5.5 +.B CURL_VERSION_IPV6 +supports IPv6 +.TP +.B CURL_VERSION_KERBEROS4 +supports kerberos4 (when using FTP) +.TP +.B CURL_VERSION_SSL +supports SSL (HTTPS/FTPS) +.TP +.B CURL_VERSION_LIBZ +supports HTTP deflate using libz +.PP +\fIssl_version\fP is an ascii string for the OpenSSL version used. If libcurl +has no SSL support, this is NULL. + +\fIssl_version_num\fP is the numerical OpenSSL version value as defined by the +OpenSSL project. If libcurl has no SSL support, this is 0. + +\fIlibz_version\fP is an ascii string (there is no numerical version). If +libcurl has no libz support, this is NULL. + +\fIprotocols\fP is a pointer to an array of char * pointers, containing the +names protocols that libcurl supports (using lowercase letters). The protocol +names are the same as would be used in URLs. The array is terminated by a NULL +entry. + + +.SH RETURN VALUE +A pointer to a curl_version_info_data struct. +.SH "SEE ALSO" +\fIcurl_version(3)\fP +.SH BUGS +No known bugs. diff --git a/docs/libcurl/index.html b/docs/libcurl/index.html index a14679860..a1d5f8301 100644 --- a/docs/libcurl/index.html +++ b/docs/libcurl/index.html @@ -8,46 +8,46 @@ HTML>

Index to Curl documentation

Programs

-

curl-config.html -

curl.html +

curl-config +

curl

Overviews

-

libcurl.html -

libcurl-multi.html -

libcurl-errors.html +

libcurl +

libcurl-multi +

libcurl-errors

Library routines

-

curl_easy_cleanup.html -

curl_easy_duphandle.html -

curl_easy_getinfo.html +

curl_easy_cleanup +

curl_easy_duphandle +

curl_easy_getinfo

curl_easy_init.html -

curl_easy_perform.html -

curl_easy_setopt.html -

curl_escape.html -

curl_formadd.html -

curl_formfree.html -

curl_formparse.html -

curl_free.html -

curl_getdate.html -

curl_getenv.html -

curl_global_cleanup.html -

curl_global_init.html -

curl_mprintf.html -

curl_slist_append.html -

curl_slist_free_all.html -

curl_strequal.html -

curl_strnequal.html -

curl_unescape.html -

curl_version.html +

curl_easy_perform +

curl_easy_setopt +

curl_escape +

curl_formadd +

curl_formfree +

curl_formparse +

curl_free +

curl_getdate +

curl_getenv +

curl_global_cleanup +

curl_global_init +

curl_mprintf +

curl_slist_append +

curl_slist_free_all +

curl_strequal +

curl_strnequal +

curl_unescape +

curl_version +

curl_version_info


-

curl_multi_add_handle.html -

curl_multi_cleanup.html -

curl_multi_fdset.html -

curl_multi_info_read.html -

curl_multi_init.html -

curl_multi_perform.html -

curl_multi_remove_handle.html - +

curl_multi_add_handle +

curl_multi_cleanup +

curl_multi_fdset +

curl_multi_info_read +

curl_multi_init +

curl_multi_perform +

curl_multi_remove_handle diff --git a/include/curl/curl.h b/include/curl/curl.h index de1e5aeb2..e5ba70379 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -916,29 +916,25 @@ CURLcode curl_share_destroy (curl_share *); * Structures for querying information about the curl library at runtime. */ -/* declared as a struct to allow future expansion while remaining backwards - * and binary compatible; any new fields in these two structs must be added - * after the existing fields */ -typedef struct { - const char *protoname; -} curl_runtime_protocol_info; - typedef struct { const char *version; /* LIBCURL_VERSION */ unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ int features; /* bitmask, see defines below */ char *ssl_version; /* human readable string */ long ssl_version_num; /* number */ - char *libz_version; /* human readable string */ + const char *libz_version; /* human readable string */ /* protocols is terminated by an entry with a NULL protoname */ - const curl_runtime_protocol_info *protocols; + const char *protocols[1]; } curl_version_info_data; #define CURL_VERSION_IPV6 (1<<0) #define CURL_VERSION_KERBEROS4 (1<<1) +#define CURL_VERSION_SSL (1<<2) +#define CURL_VERSION_LIBZ (1<<3) /* returns a pointer to a static copy of the version info struct */ -const curl_version_info_data *curl_version_info(void); +curl_version_info_data *curl_version_info(void); #ifdef __cplusplus } diff --git a/lib/version.c b/lib/version.c index 6456194fd..33cea4619 100644 --- a/lib/version.c +++ b/lib/version.c @@ -120,7 +120,7 @@ char *curl_version(void) /* data for curl_version_info */ -static const curl_runtime_protocol_info protocols[] = { +static const char *protocols[] = { #ifndef CURL_DISABLE_FTP { "ftp" }, #endif @@ -157,12 +157,19 @@ static const curl_runtime_protocol_info protocols[] = { static curl_version_info_data version_info = { LIBCURL_VERSION, LIBCURL_VERSION_NUM, + OS, /* as found by configure or set by hand at build-time */ 0 /* features is 0 by default */ #ifdef ENABLE_IPV6 | CURL_VERSION_IPV6 #endif #ifdef KRB4 | CURL_VERSION_KERBEROS4 +#endif +#ifdef USE_SSLEAY + | CURL_VERSION_SSL +#endif +#ifdef HAVE_LIBZ + | CURL_VERSION_LIBZ #endif , NULL, /* ssl_version */ @@ -171,7 +178,7 @@ static curl_version_info_data version_info = { protocols }; -const curl_version_info_data *curl_version_info(void) +curl_version_info_data *curl_version_info(void) { #ifdef USE_SSLEAY static char ssl_buffer[80];