Compare commits
11 Commits
curl-7_7-b
...
curl-7_7
Author | SHA1 | Date | |
---|---|---|---|
![]() |
546572da04 | ||
![]() |
005536cc28 | ||
![]() |
3d5b6aa3b0 | ||
![]() |
f8d883355d | ||
![]() |
c23df41d83 | ||
![]() |
8e7b261984 | ||
![]() |
08e3d034ef | ||
![]() |
2f869f89ff | ||
![]() |
0f310a5001 | ||
![]() |
ad1abee441 | ||
![]() |
669709f80e |
15
CHANGES
15
CHANGES
@@ -6,6 +6,21 @@
|
|||||||
|
|
||||||
History of Changes
|
History of Changes
|
||||||
|
|
||||||
|
Version 7.7
|
||||||
|
|
||||||
|
Daniel (22 March 2001)
|
||||||
|
- The configure script now fails with an error message if gethostbyname_r() is
|
||||||
|
detected but it couldn't figure out how to invoke it (what amount of
|
||||||
|
arguments it is supposed to get). Reports from Andr<64>s Garc<72>a made me aware
|
||||||
|
of this need.
|
||||||
|
|
||||||
|
- Talking with Jim Drash made me finally put the curl_escape and curl_unescape
|
||||||
|
functions in the curl.h include file and write man pages for them. The
|
||||||
|
escape function was modified to use the same interface as the unescape one
|
||||||
|
had.
|
||||||
|
|
||||||
|
- No bug reports at all on the latest betas. Release time coming up.
|
||||||
|
|
||||||
Version 7.7-beta5
|
Version 7.7-beta5
|
||||||
|
|
||||||
Daniel (19 March 2001)
|
Daniel (19 March 2001)
|
||||||
|
@@ -295,6 +295,14 @@ exit (rc != 0 ? 1 : 0); }],[
|
|||||||
[ac_cv_gethostbyname_args=0])],
|
[ac_cv_gethostbyname_args=0])],
|
||||||
[ac_cv_gethostbyname_args=0])])
|
[ac_cv_gethostbyname_args=0])])
|
||||||
|
|
||||||
|
if test "$ac_cv_func_gethostbyname_r" = "yes"; then
|
||||||
|
if test "$ac_cv_gethostbyname_args" = "0"; then
|
||||||
|
dnl there's a gethostbyname_r() function, but we don't know how
|
||||||
|
dnl many arguments it wants!
|
||||||
|
AC_MSG_ERROR([couldn't figure out how to use gethostbyname_r()])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
5
docs/FAQ
5
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: March 13, 2001 (http://curl.haxx.se/docs/faq.shtml)
|
Updated: March 22, 2001 (http://curl.haxx.se/docs/faq.shtml)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -79,7 +79,8 @@ FAQ
|
|||||||
Curl supports a range of common internet protocols, currently including
|
Curl supports a range of common internet protocols, currently including
|
||||||
HTTP, HTTPS, FTP, GOPHER, LDAP, DICT, TELNET and FILE.
|
HTTP, HTTPS, FTP, GOPHER, LDAP, DICT, TELNET and FILE.
|
||||||
|
|
||||||
We spell it cURL or just curl.
|
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
||||||
|
[kurl].
|
||||||
|
|
||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
|
|
||||||
|
@@ -17,7 +17,9 @@ man_MANS = \
|
|||||||
curl_getenv.3 \
|
curl_getenv.3 \
|
||||||
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_escape.3 \
|
||||||
|
curl_unescape.3
|
||||||
|
|
||||||
EXTRA_DIST = $(man_MANS) \
|
EXTRA_DIST = $(man_MANS) \
|
||||||
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
||||||
|
19
docs/TODO
19
docs/TODO
@@ -9,18 +9,24 @@ TODO
|
|||||||
Things to do in project cURL. Please tell me what you think, contribute and
|
Things to do in project cURL. Please tell me what you think, contribute and
|
||||||
send me patches that improve things!
|
send me patches that improve things!
|
||||||
|
|
||||||
To do for the 7.8 release:
|
To do for the next release:
|
||||||
|
|
||||||
* Make SSL session ids get used if multiple HTTPS documents from the same
|
* Make SSL session ids get used if multiple HTTPS documents from the same
|
||||||
host is requested.
|
host is requested.
|
||||||
|
|
||||||
* Document the undocumented libcurl functions: the printf clones (like
|
* Document the undocumented libcurl functions: the printf clones (like
|
||||||
curl_msprintf, curl_mfprintf, curl_msnprintf, curl_maprintf and
|
curl_msprintf, curl_mfprintf, curl_msnprintf, curl_maprintf and
|
||||||
curl_mvfprintf), the string compare functions (curl_strequal
|
curl_mvfprintf) and the string compare functions (curl_strequal
|
||||||
and curl_strnequal) and the URL escape/unescape functions.
|
and curl_strnequal).
|
||||||
|
|
||||||
To do in a future release (random order):
|
To do in a future release (random order):
|
||||||
|
|
||||||
|
* Rewrite parts of the test suite. Make a (XML?) format to store all
|
||||||
|
test-data in a single for a single test case. The current system makes far
|
||||||
|
too many separate files. We also need to have the test suite support
|
||||||
|
different behaviors, like when libcurl is compiled for IPv6 support and
|
||||||
|
thus performs a different set of FTP commands.
|
||||||
|
|
||||||
* Add configure options that disables certain protocols in libcurl to
|
* Add configure options that disables certain protocols in libcurl to
|
||||||
decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
|
decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
|
||||||
telnet, ldap, dict or file.
|
telnet, ldap, dict or file.
|
||||||
@@ -33,9 +39,10 @@ To do in a future release (random order):
|
|||||||
stamp as the remote file. libcurl already is capable of fetching the remote
|
stamp as the remote file. libcurl already is capable of fetching the remote
|
||||||
file's date.
|
file's date.
|
||||||
|
|
||||||
* Make the SSL layer option capable of using the Mozilla Security Services as
|
* Make curl's SSL layer option capable of using other free SSL libraries.
|
||||||
an alternative to OpenSSL:
|
Such as the Mozilla Security Services
|
||||||
http://www.mozilla.org/projects/security/pki/nss/
|
(http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS
|
||||||
|
(http://gnutls.hellug.gr/)
|
||||||
|
|
||||||
* Add asynchronous name resolving, as this enables full timeout support for
|
* Add asynchronous name resolving, as this enables full timeout support for
|
||||||
fork() systems.
|
fork() systems.
|
||||||
|
25
docs/curl_escape.3
Normal file
25
docs/curl_escape.3
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
.\" You can view this file with:
|
||||||
|
.\" nroff -man [file]
|
||||||
|
.\" Written by daniel@haxx.se
|
||||||
|
.\"
|
||||||
|
.TH curl_escape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_escape - URL encodes the given string
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "char *curl_escape( char *" url ", int "length " );"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function will convert the given input string to an URL encoded string and
|
||||||
|
return that as a new allocated string. All input characters that are not a-z,
|
||||||
|
A-Z or 0-9 will be converted to their "URL escaped" version.
|
||||||
|
|
||||||
|
If the 'length' argument is set to 0, curl_escape() will use strlen() on the
|
||||||
|
input 'url' string to find out the size.
|
||||||
|
|
||||||
|
You must free() the returned string when you're done with it.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
A pointer to a zero terminated string or NULL if it failed.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.I curl_unescape(), RFC 2396
|
27
docs/curl_unescape.3
Normal file
27
docs/curl_unescape.3
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
.\" You can view this file with:
|
||||||
|
.\" nroff -man [file]
|
||||||
|
.\" Written by daniel@haxx.se
|
||||||
|
.\"
|
||||||
|
.TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_unescape - URL decodes the given string
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "char *curl_unescape( char *" url ", int "length " );"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function will convert the given URL encoded input string to a "plain
|
||||||
|
string" and return that as a new allocated string. All input characters that
|
||||||
|
are URL encoded (%XX where XX is a two-digit hexadecimal number, or +) will be
|
||||||
|
converted to their plain text versions (up to a ? letter, no letters to the
|
||||||
|
right of a ? letter will be converted).
|
||||||
|
|
||||||
|
If the 'length' argument is set to 0, curl_unescape() will use strlen() on the
|
||||||
|
input 'url' string to find out the size.
|
||||||
|
|
||||||
|
You must free() the returned string when you're done with it.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
A pointer to a zero terminated string or NULL if it failed.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.I curl_escape(), RFC 2396
|
@@ -475,8 +475,13 @@ char *curl_getenv(char *variable);
|
|||||||
/* Returns a static ascii string of the libcurl version. */
|
/* Returns a static ascii string of the libcurl version. */
|
||||||
char *curl_version(void);
|
char *curl_version(void);
|
||||||
|
|
||||||
|
/* Escape and unescape URL encoding in strings. The functions return a new
|
||||||
|
* allocated string or NULL if an error occurred. */
|
||||||
|
char *curl_escape(char *string, int length);
|
||||||
|
char *curl_unescape(char *string, int length);
|
||||||
|
|
||||||
/* This is the version number */
|
/* This is the version number */
|
||||||
#define LIBCURL_VERSION "7.7-beta5"
|
#define LIBCURL_VERSION "7.7"
|
||||||
#define LIBCURL_VERSION_NUM 0x070700
|
#define LIBCURL_VERSION_NUM 0x070700
|
||||||
|
|
||||||
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
||||||
|
120
lib/escape.c
120
lib/escape.c
@@ -36,74 +36,74 @@
|
|||||||
#include "memdebug.h"
|
#include "memdebug.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *curl_escape(char *string)
|
char *curl_escape(char *string, int length)
|
||||||
{
|
{
|
||||||
int alloc=strlen(string)+1;
|
int alloc = (length?length:strlen(string))+1;
|
||||||
char *ns = malloc(alloc);
|
char *ns = malloc(alloc);
|
||||||
unsigned char in;
|
unsigned char in;
|
||||||
int newlen = alloc;
|
int newlen = alloc;
|
||||||
int index=0;
|
int index=0;
|
||||||
|
|
||||||
while(*string) {
|
while(length--) {
|
||||||
in = *string;
|
in = *string;
|
||||||
if(' ' == in)
|
if(' ' == in)
|
||||||
ns[index++] = '+';
|
ns[index++] = '+';
|
||||||
else if(!(in >= 'a' && in <= 'z') &&
|
else if(!(in >= 'a' && in <= 'z') &&
|
||||||
!(in >= 'A' && in <= 'Z') &&
|
!(in >= 'A' && in <= 'Z') &&
|
||||||
!(in >= '0' && in <= '9')) {
|
!(in >= '0' && in <= '9')) {
|
||||||
/* encode it */
|
/* encode it */
|
||||||
newlen += 2; /* the size grows with two, since this'll become a %XX */
|
newlen += 2; /* the size grows with two, since this'll become a %XX */
|
||||||
if(newlen > alloc) {
|
if(newlen > alloc) {
|
||||||
alloc *= 2;
|
alloc *= 2;
|
||||||
ns = realloc(ns, alloc);
|
ns = realloc(ns, alloc);
|
||||||
if(!ns)
|
if(!ns)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
sprintf(&ns[index], "%%%02X", in);
|
|
||||||
index+=3;
|
|
||||||
}
|
}
|
||||||
else {
|
sprintf(&ns[index], "%%%02X", in);
|
||||||
/* just copy this */
|
index+=3;
|
||||||
ns[index++]=in;
|
}
|
||||||
}
|
else {
|
||||||
string++;
|
/* just copy this */
|
||||||
}
|
ns[index++]=in;
|
||||||
ns[index]=0; /* terminate it */
|
}
|
||||||
return ns;
|
string++;
|
||||||
|
}
|
||||||
|
ns[index]=0; /* terminate it */
|
||||||
|
return ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *curl_unescape(char *string, int length)
|
char *curl_unescape(char *string, int length)
|
||||||
{
|
{
|
||||||
int alloc = (length?length:strlen(string))+1;
|
int alloc = (length?length:strlen(string))+1;
|
||||||
char *ns = malloc(alloc);
|
char *ns = malloc(alloc);
|
||||||
unsigned char in;
|
unsigned char in;
|
||||||
int index=0;
|
int index=0;
|
||||||
unsigned int hex;
|
unsigned int hex;
|
||||||
char querypart=FALSE; /* everything to the right of a '?' letter is
|
char querypart=FALSE; /* everything to the right of a '?' letter is
|
||||||
the "query part" where '+' should become ' '.
|
the "query part" where '+' should become ' '.
|
||||||
RFC 2316, section 3.10 */
|
RFC 2316, section 3.10 */
|
||||||
|
|
||||||
while(--alloc > 0) {
|
while(--alloc > 0) {
|
||||||
in = *string;
|
in = *string;
|
||||||
if(querypart && ('+' == in))
|
if(querypart && ('+' == in))
|
||||||
in = ' ';
|
in = ' ';
|
||||||
else if(!querypart && ('?' == in)) {
|
else if(!querypart && ('?' == in)) {
|
||||||
/* we have "walked in" to the query part */
|
/* we have "walked in" to the query part */
|
||||||
querypart=TRUE;
|
querypart=TRUE;
|
||||||
|
}
|
||||||
|
else if('%' == in) {
|
||||||
|
/* encoded part */
|
||||||
|
if(sscanf(string+1, "%02X", &hex)) {
|
||||||
|
in = hex;
|
||||||
|
string+=2;
|
||||||
|
alloc-=2;
|
||||||
}
|
}
|
||||||
else if('%' == in) {
|
}
|
||||||
/* encoded part */
|
|
||||||
if(sscanf(string+1, "%02X", &hex)) {
|
ns[index++] = in;
|
||||||
in = hex;
|
string++;
|
||||||
string+=2;
|
}
|
||||||
alloc-=2;
|
ns[index]=0; /* terminate it */
|
||||||
}
|
return ns;
|
||||||
}
|
|
||||||
|
|
||||||
ns[index++] = in;
|
|
||||||
string++;
|
|
||||||
}
|
|
||||||
ns[index]=0; /* terminate it */
|
|
||||||
return ns;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
/* Escape and unescape URL encoding in strings. The functions return a new
|
/* Escape and unescape URL encoding in strings. The functions return a new
|
||||||
* allocated string or NULL if an error occurred. */
|
* allocated string or NULL if an error occurred. */
|
||||||
|
|
||||||
char *curl_escape(char *string);
|
char *curl_escape(char *string, int length);
|
||||||
char *curl_unescape(char *string, int length);
|
char *curl_unescape(char *string, int length);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -29,3 +29,4 @@ EXPORTS
|
|||||||
curl_mvfprintf @ 20 ;
|
curl_mvfprintf @ 20 ;
|
||||||
curl_strequal @ 21 ;
|
curl_strequal @ 21 ;
|
||||||
curl_strnequal @ 22 ;
|
curl_strnequal @ 22 ;
|
||||||
|
|
||||||
|
@@ -1,3 +1,3 @@
|
|||||||
#define CURL_NAME "curl"
|
#define CURL_NAME "curl"
|
||||||
#define CURL_VERSION "7.7-beta5"
|
#define CURL_VERSION "7.7"
|
||||||
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
|
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
|
||||||
|
Reference in New Issue
Block a user