aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/curl_easy_setopt.372
-rw-r--r--include/curl/curl.h9
-rw-r--r--lib/url.c4
-rw-r--r--lib/urldata.h7
-rw-r--r--src/main.c2
-rwxr-xr-xtests/runtests.pl24
6 files changed, 59 insertions, 59 deletions
diff --git a/docs/curl_easy_setopt.3 b/docs/curl_easy_setopt.3
index 8e6fd1b31..db776644d 100644
--- a/docs/curl_easy_setopt.3
+++ b/docs/curl_easy_setopt.3
@@ -42,54 +42,43 @@ call.
These options are in a bit of random order, but you'll figure it out!
.TP 0.8i
.B CURLOPT_FILE
-Data pointer to pass instead of FILE * to the file write function. Note that
-if you specify the
+Data pointer to pass to file write function. Note that if you specify the
.I CURLOPT_WRITEFUNCTION
-, this is the pointer you'll get as input.
+, this is the pointer you'll get as input. If you don't use a callback, you
+must pass a 'FILE *' as libcurl passes it to fwrite() when writing data.
-NOTE: If you're using libcurl as a win32 .DLL, you MUST use a
-.I CURLOPT_WRITEFUNCTION
-if you set the
-.I CURLOPT_FILE
-option.
+NOTE: If you're using libcurl as a win32 DLL, you MUST use the
+\fICURLOPT_WRITEFUNCTION\fP if you set this option.
.TP
.B CURLOPT_WRITEFUNCTION
Function pointer that should match the following prototype:
-.BI "size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream);"
+.BI "size_t function( void *ptr, size_t size, size_t nmemb, void *stream);"
This function gets called by libcurl as soon as there is received data that
-needs to be written down. The size of the data pointed to by
-.I ptr
-is
-.I size
-multiplied with
-.I nmemb.
-Return the number of bytes actually written or return -1 to signal error to the library (it will cause it to abort the transfer).
+needs to be written down. The size of the data pointed to by \fIptr\fP is
+\fIsize\fP multiplied with \fInmemb\fP. Return the number of bytes actually
+written or return -1 to signal error to the library (it will cause it to abort
+the transfer with CURLE_WRITE_ERROR).
+
+Set the \fIstream\fP argument with the \fBCURLOPT_FILE\fP option.
.TP
.B CURLOPT_INFILE
-Data pointer to pass instead of FILE * to the file read function. Note that if
-you specify the
-.I CURLOPT_READFUNCTION
-, this is the pointer you'll get as input.
+Data pointer to pass to the file read function. Note that if you specify the
+\fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you
+don't specify a read callback, this must be a valid FILE *.
-NOTE: If you're using libcurl as a win32 .DLL, you MUST use a
-.I CURLOPT_READFUNCTION
-if you set the
-.I CURLOPT_INFILE
-option.
+NOTE: If you're using libcurl as a win32 DLL, you MUST use a
+\fICURLOPT_READFUNCTION\fP if you set this option.
.TP
.B CURLOPT_READFUNCTION
Function pointer that should match the following prototype:
-.BI "size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream);"
+.BI "size_t function( void *ptr, size_t size, size_t nmemb, void *stream);"
This function gets called by libcurl as soon as it needs to read data in order
-to send it to the peer. The data area pointed at by the pointer
-.I ptr
-may be filled with at most
-.I size
-multiplied with
-.I nmemb
-number of bytes. Your function must return the actual number of bytes that you
-stored in that memory area. Returning -1 will signal an error to the library
-and cause it to abort the current transfer immediately.
+to send it to the peer. The data area pointed at by the pointer \fIptr\fP may
+be filled with at most \fIsize\fP multiplied with \fInmemb\fP number of
+bytes. Your function must return the actual number of bytes that you stored in
+that memory area. Returning -1 will signal an error to the library and cause
+it to abort the current transfer immediately (with a CURLE_READ_ERROR return
+code).
.TP
.B CURLOPT_INFILESIZE
When uploading a file to a remote site, this option should be used to tell
@@ -317,16 +306,15 @@ struct curl_slist structs properly filled in as described for
.I "CURLOPT_QUOTE"
.TP
.B CURLOPT_WRITEHEADER
-Pass a FILE * to be used to write the header part of the received data to. The
-headers are guaranteed to be written one-by-one to this file handle and only
-complete lines are written. Parsing headers should be easy enough using
-this. See also the
-.I CURLOPT_HEADERFUNCTION
-option.
+Pass a pointer to be used to write the header part of the received data to. If
+you don't use a callback to take care of the writing, this must be a FILE
+*. The headers are guaranteed to be written one-by-one and only complete lines
+are written. Parsing headers should be easy enough using this. See also the
+\fICURLOPT_HEADERFUNCTION\fP option.
.TP
.B CURLOPT_HEADERFUNCTION
Function pointer that should match the following prototype:
-.BI "size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream);"
+.BI "size_t function( void *ptr, size_t size, size_t nmemb, void *stream);"
This function gets called by libcurl as soon as there is received header data
that needs to be written down. The function will be called once for each
header with a complete header line in each invoke. The size of the data
diff --git a/include/curl/curl.h b/include/curl/curl.h
index 850c4fcd1..cf846c338 100644
--- a/include/curl/curl.h
+++ b/include/curl/curl.h
@@ -76,12 +76,12 @@ typedef int (*curl_progress_callback)(void *clientp,
typedef size_t (*curl_write_callback)(char *buffer,
size_t size,
size_t nitems,
- FILE *outstream);
+ void *outstream);
typedef size_t (*curl_read_callback)(char *buffer,
size_t size,
size_t nitems,
- FILE *instream);
+ void *instream);
typedef int (*curl_passwd_callback)(void *clientp,
char *prompt,
@@ -173,7 +173,7 @@ typedef enum {
typedef enum {
CINIT(NOTHING, LONG, 0), /********* the first one is unused ************/
- /* This is the FILE * the regular output should be written to. */
+ /* This is the FILE * or void * the regular output should be written to. */
CINIT(FILE, OBJECTPOINT, 1),
/* The full URL to get/put */
@@ -276,7 +276,8 @@ typedef enum {
/* send linked-list of QUOTE commands */
CINIT(QUOTE, OBJECTPOINT, 28),
- /* send FILE * to store headers to */
+ /* send FILE * or void * to store headers to, if you use a callback it
+ is simply passed to the callback unmodified */
CINIT(WRITEHEADER, OBJECTPOINT, 29),
#ifdef MULTIDOC
diff --git a/lib/url.c b/lib/url.c
index c54cfe8d0..3fef8b651 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -216,10 +216,10 @@ CURLcode Curl_open(CURL **curl, char *url)
data->err = stderr; /* default stderr to stderr */
/* use fwrite as default function to store output */
- data->fwrite = (size_t (*)(char *, size_t, size_t, FILE *))fwrite;
+ data->fwrite = (curl_write_callback)fwrite;
/* use fread as default function to read input */
- data->fread = (size_t (*)(char *, size_t, size_t, FILE *))fread;
+ data->fread = (curl_read_callback)fread;
/* set the default passwd function */
data->fpasswd = my_getpass;
diff --git a/lib/urldata.h b/lib/urldata.h
index 8a0c1f19b..a0580975d 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -456,9 +456,10 @@ struct UrlData {
long header_size; /* size of read header(s) in bytes */
long request_size; /* the amount of bytes sent in the request(s) */
- FILE *out; /* the fetched file goes here */
- FILE *in; /* the uploaded file is read from here */
- FILE *writeheader; /* write the header to this is non-NULL */
+ void *out; /* the fetched file goes here */
+ void *in; /* the uploaded file is read from here */
+ void *writeheader; /* write the header to this is non-NULL */
+
char *url; /* what to get */
char *freethis; /* if non-NULL, an allocated string for the URL */
long use_port; /* which port to use (when not using default) */
diff --git a/src/main.c b/src/main.c
index ed25e7c38..046fa1d19 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1268,7 +1268,7 @@ struct OutStruct {
struct Configurable *config;
};
-int my_fwrite(void *buffer, size_t size, size_t nmemb, FILE *stream)
+int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
{
struct OutStruct *out=(struct OutStruct *)stream;
if(out && !out->stream) {
diff --git a/tests/runtests.pl b/tests/runtests.pl
index ff7fdbb7b..7e5c29ef3 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -20,7 +20,6 @@ my $CURL="../src/curl"; # what curl executable to run on the tests
my $LOGDIR="log";
my $TESTDIR="data";
my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
-my $CURLOUT="$LOGDIR/curl.out"; # curl output if not stdout
my $CURLLOG="$LOGDIR/curl.log"; # all command lines run
my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
@@ -59,7 +58,8 @@ my $short;
my $verbose;
my $debugprotocol;
my $anyway;
-my $gdbthis; # run test case with gdb debugger
+my $gdbthis; # run test case with gdb debugger
+my $keepoutfiles; # keep stdout and stderr files after tests
#######################################################################
# Return the pid of the server as found in the given pid file
@@ -432,6 +432,8 @@ sub singletest {
# if this file exists, it is FTP server instructions:
my $ftpservercmd="$TESTDIR/ftpd$NUMBER.txt";
+ my $CURLOUT="$LOGDIR/curl$NUMBER.out"; # curl output if not stdout
+
if(! -r $CURLCMD) {
if($verbose) {
# this is not a test
@@ -603,12 +605,15 @@ sub singletest {
}
- # remove the stdout and stderr files
- unlink($STDOUT);
- unlink($STDERR);
+ if(!$keepoutfiles) {
+ # remove the stdout and stderr files
+ unlink($STDOUT);
+ unlink($STDERR);
+ unlink($CURLOUT); # remove the downloaded results
+
+ unlink("$LOGDIR/upload.$NUMBER"); # remove upload leftovers
+ }
- unlink("$LOGDIR/upload.$NUMBER"); # remove upload leftovers
- unlink($CURLOUT); # remove the downloaded results
unlink($FTPDCMD); # remove the instructions for this test
if($memory_debug) {
@@ -737,6 +742,10 @@ do {
# continue anyway, even if a test fail
$anyway=1;
}
+ elsif($ARGV[0] eq "-k") {
+ # keep stdout and stderr files after tests
+ $keepoutfiles=1;
+ }
elsif($ARGV[0] eq "-h") {
# show help text
print <<EOHELP
@@ -745,6 +754,7 @@ Usage: runtests.pl [options]
-d display server debug info
-g run the test case with gdb
-h this help text
+ -k keep stdout and stderr files present after tests
-s short output
-v verbose output
[num] like "5 6 9" or " 5 to 22 " to run those tests only