1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

enhanced curl_version_info

This commit is contained in:
Daniel Stenberg 2002-09-26 13:03:22 +00:00
parent 9031e33b66
commit 9247daf953
6 changed files with 135 additions and 46 deletions

View File

@ -7,6 +7,9 @@
Changelog Changelog
Daniel (26 Sep 2002)
- Extended curl_version_info() more and wrote a man page for it.
Daniel (25 Sep 2002) Daniel (25 Sep 2002)
- libcurl could leak memory when downloading multiple files using http ranges. - libcurl could leak memory when downloading multiple files using http ranges.

View File

@ -19,6 +19,7 @@ man_MANS = \
curl_slist_append.3 \ curl_slist_append.3 \
curl_slist_free_all.3 \ curl_slist_free_all.3 \
curl_version.3 \ curl_version.3 \
curl_version_info.3 \
curl_escape.3 \ curl_escape.3 \
curl_unescape.3 \ curl_unescape.3 \
curl_free.3 \ curl_free.3 \
@ -53,6 +54,7 @@ HTMLPAGES = \
curl_slist_append.html \ curl_slist_append.html \
curl_slist_free_all.html \ curl_slist_free_all.html \
curl_version.html \ curl_version.html \
curl_version_info.html \
curl_escape.html \ curl_escape.html \
curl_unescape.html \ curl_unescape.html \
curl_free.html \ curl_free.html \

View File

@ -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 <curl/curl.h>
.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.

View File

@ -8,46 +8,46 @@ HTML>
<H1 ALIGN="CENTER">Index to Curl documentation</H1> <H1 ALIGN="CENTER">Index to Curl documentation</H1>
<H2>Programs</H2> <H2>Programs</H2>
<P><A HREF="curl-config.html">curl-config.html</A> <P><A HREF="curl-config.html">curl-config</A>
<P><A HREF="curl.html">curl.html</A> <P><A HREF="curl.html">curl</A>
<h2>Overviews</h2> <h2>Overviews</h2>
<P><A HREF="libcurl.html">libcurl.html</A> <P><A HREF="libcurl.html">libcurl</A>
<p><a href="libcurl-multi.html">libcurl-multi.html</a> <p><a href="libcurl-multi.html">libcurl-multi</a>
<p><a href="libcurl-errors.html">libcurl-errors.html</a> <p><a href="libcurl-errors.html">libcurl-errors</a>
<H2>Library routines</H2> <H2>Library routines</H2>
<P><A HREF="curl_easy_cleanup.html">curl_easy_cleanup.html</A> <P><A HREF="curl_easy_cleanup.html">curl_easy_cleanup</A>
<P><A HREF="curl_easy_duphandle.html">curl_easy_duphandle.html</A> <P><A HREF="curl_easy_duphandle.html">curl_easy_duphandle</A>
<P><A HREF="curl_easy_getinfo.html">curl_easy_getinfo.html</A> <P><A HREF="curl_easy_getinfo.html">curl_easy_getinfo</A>
<P><A HREF="curl_easy_init.html">curl_easy_init.html</A> <P><A HREF="curl_easy_init.html">curl_easy_init.html</A>
<P><A HREF="curl_easy_perform.html">curl_easy_perform.html</A> <P><A HREF="curl_easy_perform.html">curl_easy_perform</A>
<P><A HREF="curl_easy_setopt.html">curl_easy_setopt.html</A> <P><A HREF="curl_easy_setopt.html">curl_easy_setopt</A>
<P><A HREF="curl_escape.html">curl_escape.html</A> <P><A HREF="curl_escape.html">curl_escape</A>
<P><A HREF="curl_formadd.html">curl_formadd.html</A> <P><A HREF="curl_formadd.html">curl_formadd</A>
<P><A HREF="curl_formfree.html">curl_formfree.html</A> <P><A HREF="curl_formfree.html">curl_formfree</A>
<P><A HREF="curl_formparse.html">curl_formparse.html</A> <P><A HREF="curl_formparse.html">curl_formparse</A>
<P><A HREF="curl_free.html">curl_free.html</A> <P><A HREF="curl_free.html">curl_free</A>
<P><A HREF="curl_getdate.html">curl_getdate.html</A> <P><A HREF="curl_getdate.html">curl_getdate</A>
<P><A HREF="curl_getenv.html">curl_getenv.html</A> <P><A HREF="curl_getenv.html">curl_getenv</A>
<P><A HREF="curl_global_cleanup.html">curl_global_cleanup.html</A> <P><A HREF="curl_global_cleanup.html">curl_global_cleanup</A>
<P><A HREF="curl_global_init.html">curl_global_init.html</A> <P><A HREF="curl_global_init.html">curl_global_init</A>
<P><A HREF="curl_mprintf.html">curl_mprintf.html</A> <P><A HREF="curl_mprintf.html">curl_mprintf</A>
<P><A HREF="curl_slist_append.html">curl_slist_append.html</A> <P><A HREF="curl_slist_append.html">curl_slist_append</A>
<P><A HREF="curl_slist_free_all.html">curl_slist_free_all.html</A> <P><A HREF="curl_slist_free_all.html">curl_slist_free_all</A>
<P><A HREF="curl_strequal.html">curl_strequal.html</A> <P><A HREF="curl_strequal.html">curl_strequal</A>
<P><A HREF="curl_strnequal.html">curl_strnequal.html</A> <P><A HREF="curl_strnequal.html">curl_strnequal</A>
<P><A HREF="curl_unescape.html">curl_unescape.html</A> <P><A HREF="curl_unescape.html">curl_unescape</A>
<P><A HREF="curl_version.html">curl_version.html</A> <P><A HREF="curl_version.html">curl_version</A>
<P><A HREF="curl_version_info.html">curl_version_info</A>
<hr> <hr>
<p><a href="curl_multi_add_handle.html">curl_multi_add_handle.html</a> <p><a href="curl_multi_add_handle.html">curl_multi_add_handle</a>
<p><a href="curl_multi_cleanup.html">curl_multi_cleanup.html</a> <p><a href="curl_multi_cleanup.html">curl_multi_cleanup</a>
<p><a href="curl_multi_fdset.html">curl_multi_fdset.html</a> <p><a href="curl_multi_fdset.html">curl_multi_fdset</a>
<p><a href="curl_multi_info_read.html">curl_multi_info_read.html</a> <p><a href="curl_multi_info_read.html">curl_multi_info_read</a>
<p><a href="curl_multi_init.html">curl_multi_init.html</a> <p><a href="curl_multi_init.html">curl_multi_init</a>
<p><a href="curl_multi_perform.html">curl_multi_perform.html</a> <p><a href="curl_multi_perform.html">curl_multi_perform</a>
<p><a href="curl_multi_remove_handle.html">curl_multi_remove_handle.html</a> <p><a href="curl_multi_remove_handle.html">curl_multi_remove_handle</a>
</BODY> </BODY>
</HTML> </HTML>

View File

@ -916,29 +916,25 @@ CURLcode curl_share_destroy (curl_share *);
* Structures for querying information about the curl library at runtime. * 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 { typedef struct {
const char *version; /* LIBCURL_VERSION */ const char *version; /* LIBCURL_VERSION */
unsigned int version_num; /* LIBCURL_VERSION_NUM */ unsigned int version_num; /* LIBCURL_VERSION_NUM */
const char *host; /* OS/host/cpu/machine when configured */
int features; /* bitmask, see defines below */ int features; /* bitmask, see defines below */
char *ssl_version; /* human readable string */ char *ssl_version; /* human readable string */
long ssl_version_num; /* number */ 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 */ /* protocols is terminated by an entry with a NULL protoname */
const curl_runtime_protocol_info *protocols; const char *protocols[1];
} curl_version_info_data; } curl_version_info_data;
#define CURL_VERSION_IPV6 (1<<0) #define CURL_VERSION_IPV6 (1<<0)
#define CURL_VERSION_KERBEROS4 (1<<1) #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 */ /* 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 #ifdef __cplusplus
} }

View File

@ -120,7 +120,7 @@ char *curl_version(void)
/* data for curl_version_info */ /* data for curl_version_info */
static const curl_runtime_protocol_info protocols[] = { static const char *protocols[] = {
#ifndef CURL_DISABLE_FTP #ifndef CURL_DISABLE_FTP
{ "ftp" }, { "ftp" },
#endif #endif
@ -157,12 +157,19 @@ static const curl_runtime_protocol_info protocols[] = {
static curl_version_info_data version_info = { static curl_version_info_data version_info = {
LIBCURL_VERSION, LIBCURL_VERSION,
LIBCURL_VERSION_NUM, LIBCURL_VERSION_NUM,
OS, /* as found by configure or set by hand at build-time */
0 /* features is 0 by default */ 0 /* features is 0 by default */
#ifdef ENABLE_IPV6 #ifdef ENABLE_IPV6
| CURL_VERSION_IPV6 | CURL_VERSION_IPV6
#endif #endif
#ifdef KRB4 #ifdef KRB4
| CURL_VERSION_KERBEROS4 | CURL_VERSION_KERBEROS4
#endif
#ifdef USE_SSLEAY
| CURL_VERSION_SSL
#endif
#ifdef HAVE_LIBZ
| CURL_VERSION_LIBZ
#endif #endif
, ,
NULL, /* ssl_version */ NULL, /* ssl_version */
@ -171,7 +178,7 @@ static curl_version_info_data version_info = {
protocols protocols
}; };
const curl_version_info_data *curl_version_info(void) curl_version_info_data *curl_version_info(void)
{ {
#ifdef USE_SSLEAY #ifdef USE_SSLEAY
static char ssl_buffer[80]; static char ssl_buffer[80];