mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
'FILE *' changed to 'void *' in all callback functions
This commit is contained in:
parent
53e0c1b1a6
commit
9304055df5
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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) */
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user