'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!
|
These options are in a bit of random order, but you'll figure it out!
|
||||||
.TP 0.8i
|
.TP 0.8i
|
||||||
.B CURLOPT_FILE
|
.B CURLOPT_FILE
|
||||||
Data pointer to pass instead of FILE * to the file write function. Note that
|
Data pointer to pass to file write function. Note that if you specify the
|
||||||
if you specify the
|
|
||||||
.I CURLOPT_WRITEFUNCTION
|
.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
|
NOTE: If you're using libcurl as a win32 DLL, you MUST use the
|
||||||
.I CURLOPT_WRITEFUNCTION
|
\fICURLOPT_WRITEFUNCTION\fP if you set this option.
|
||||||
if you set the
|
|
||||||
.I CURLOPT_FILE
|
|
||||||
option.
|
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_WRITEFUNCTION
|
.B CURLOPT_WRITEFUNCTION
|
||||||
Function pointer that should match the following prototype:
|
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
|
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
|
needs to be written down. The size of the data pointed to by \fIptr\fP is
|
||||||
.I ptr
|
\fIsize\fP multiplied with \fInmemb\fP. Return the number of bytes actually
|
||||||
is
|
written or return -1 to signal error to the library (it will cause it to abort
|
||||||
.I size
|
the transfer with CURLE_WRITE_ERROR).
|
||||||
multiplied with
|
|
||||||
.I nmemb.
|
Set the \fIstream\fP argument with the \fBCURLOPT_FILE\fP option.
|
||||||
Return the number of bytes actually written or return -1 to signal error to the library (it will cause it to abort the transfer).
|
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_INFILE
|
.B CURLOPT_INFILE
|
||||||
Data pointer to pass instead of FILE * to the file read function. Note that if
|
Data pointer to pass to the file read function. Note that if you specify the
|
||||||
you specify the
|
\fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you
|
||||||
.I CURLOPT_READFUNCTION
|
don't specify a read callback, this must be a valid FILE *.
|
||||||
, this is the pointer you'll get as input.
|
|
||||||
|
|
||||||
NOTE: If you're using libcurl as a win32 .DLL, you MUST use a
|
NOTE: If you're using libcurl as a win32 DLL, you MUST use a
|
||||||
.I CURLOPT_READFUNCTION
|
\fICURLOPT_READFUNCTION\fP if you set this option.
|
||||||
if you set the
|
|
||||||
.I CURLOPT_INFILE
|
|
||||||
option.
|
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_READFUNCTION
|
.B CURLOPT_READFUNCTION
|
||||||
Function pointer that should match the following prototype:
|
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
|
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
|
to send it to the peer. The data area pointed at by the pointer \fIptr\fP may
|
||||||
.I ptr
|
be filled with at most \fIsize\fP multiplied with \fInmemb\fP number of
|
||||||
may be filled with at most
|
bytes. Your function must return the actual number of bytes that you stored in
|
||||||
.I size
|
that memory area. Returning -1 will signal an error to the library and cause
|
||||||
multiplied with
|
it to abort the current transfer immediately (with a CURLE_READ_ERROR return
|
||||||
.I nmemb
|
code).
|
||||||
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.
|
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_INFILESIZE
|
.B CURLOPT_INFILESIZE
|
||||||
When uploading a file to a remote site, this option should be used to tell
|
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"
|
.I "CURLOPT_QUOTE"
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_WRITEHEADER
|
.B CURLOPT_WRITEHEADER
|
||||||
Pass a FILE * to be used to write the header part of the received data to. The
|
Pass a pointer to be used to write the header part of the received data to. If
|
||||||
headers are guaranteed to be written one-by-one to this file handle and only
|
you don't use a callback to take care of the writing, this must be a FILE
|
||||||
complete lines are written. Parsing headers should be easy enough using
|
*. The headers are guaranteed to be written one-by-one and only complete lines
|
||||||
this. See also the
|
are written. Parsing headers should be easy enough using this. See also the
|
||||||
.I CURLOPT_HEADERFUNCTION
|
\fICURLOPT_HEADERFUNCTION\fP option.
|
||||||
option.
|
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_HEADERFUNCTION
|
.B CURLOPT_HEADERFUNCTION
|
||||||
Function pointer that should match the following prototype:
|
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
|
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
|
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
|
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,
|
typedef size_t (*curl_write_callback)(char *buffer,
|
||||||
size_t size,
|
size_t size,
|
||||||
size_t nitems,
|
size_t nitems,
|
||||||
FILE *outstream);
|
void *outstream);
|
||||||
|
|
||||||
typedef size_t (*curl_read_callback)(char *buffer,
|
typedef size_t (*curl_read_callback)(char *buffer,
|
||||||
size_t size,
|
size_t size,
|
||||||
size_t nitems,
|
size_t nitems,
|
||||||
FILE *instream);
|
void *instream);
|
||||||
|
|
||||||
typedef int (*curl_passwd_callback)(void *clientp,
|
typedef int (*curl_passwd_callback)(void *clientp,
|
||||||
char *prompt,
|
char *prompt,
|
||||||
@ -173,7 +173,7 @@ typedef enum {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
CINIT(NOTHING, LONG, 0), /********* the first one is unused ************/
|
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),
|
CINIT(FILE, OBJECTPOINT, 1),
|
||||||
|
|
||||||
/* The full URL to get/put */
|
/* The full URL to get/put */
|
||||||
@ -276,7 +276,8 @@ typedef enum {
|
|||||||
/* send linked-list of QUOTE commands */
|
/* send linked-list of QUOTE commands */
|
||||||
CINIT(QUOTE, OBJECTPOINT, 28),
|
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),
|
CINIT(WRITEHEADER, OBJECTPOINT, 29),
|
||||||
|
|
||||||
#ifdef MULTIDOC
|
#ifdef MULTIDOC
|
||||||
|
@ -216,10 +216,10 @@ CURLcode Curl_open(CURL **curl, char *url)
|
|||||||
data->err = stderr; /* default stderr to stderr */
|
data->err = stderr; /* default stderr to stderr */
|
||||||
|
|
||||||
/* use fwrite as default function to store output */
|
/* 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 */
|
/* 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 */
|
/* set the default passwd function */
|
||||||
data->fpasswd = my_getpass;
|
data->fpasswd = my_getpass;
|
||||||
|
@ -456,9 +456,10 @@ struct UrlData {
|
|||||||
long header_size; /* size of read header(s) in bytes */
|
long header_size; /* size of read header(s) in bytes */
|
||||||
long request_size; /* the amount of bytes sent in the request(s) */
|
long request_size; /* the amount of bytes sent in the request(s) */
|
||||||
|
|
||||||
FILE *out; /* the fetched file goes here */
|
void *out; /* the fetched file goes here */
|
||||||
FILE *in; /* the uploaded file is read from here */
|
void *in; /* the uploaded file is read from here */
|
||||||
FILE *writeheader; /* write the header to this is non-NULL */
|
void *writeheader; /* write the header to this is non-NULL */
|
||||||
|
|
||||||
char *url; /* what to get */
|
char *url; /* what to get */
|
||||||
char *freethis; /* if non-NULL, an allocated string for the URL */
|
char *freethis; /* if non-NULL, an allocated string for the URL */
|
||||||
long use_port; /* which port to use (when not using default) */
|
long use_port; /* which port to use (when not using default) */
|
||||||
|
@ -1268,7 +1268,7 @@ struct OutStruct {
|
|||||||
struct Configurable *config;
|
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;
|
struct OutStruct *out=(struct OutStruct *)stream;
|
||||||
if(out && !out->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 $LOGDIR="log";
|
||||||
my $TESTDIR="data";
|
my $TESTDIR="data";
|
||||||
my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
|
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 $CURLLOG="$LOGDIR/curl.log"; # all command lines run
|
||||||
my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
|
my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
|
||||||
|
|
||||||
@ -59,7 +58,8 @@ my $short;
|
|||||||
my $verbose;
|
my $verbose;
|
||||||
my $debugprotocol;
|
my $debugprotocol;
|
||||||
my $anyway;
|
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
|
# 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:
|
# if this file exists, it is FTP server instructions:
|
||||||
my $ftpservercmd="$TESTDIR/ftpd$NUMBER.txt";
|
my $ftpservercmd="$TESTDIR/ftpd$NUMBER.txt";
|
||||||
|
|
||||||
|
my $CURLOUT="$LOGDIR/curl$NUMBER.out"; # curl output if not stdout
|
||||||
|
|
||||||
if(! -r $CURLCMD) {
|
if(! -r $CURLCMD) {
|
||||||
if($verbose) {
|
if($verbose) {
|
||||||
# this is not a test
|
# this is not a test
|
||||||
@ -603,12 +605,15 @@ sub singletest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# remove the stdout and stderr files
|
if(!$keepoutfiles) {
|
||||||
unlink($STDOUT);
|
# remove the stdout and stderr files
|
||||||
unlink($STDERR);
|
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
|
unlink($FTPDCMD); # remove the instructions for this test
|
||||||
|
|
||||||
if($memory_debug) {
|
if($memory_debug) {
|
||||||
@ -737,6 +742,10 @@ do {
|
|||||||
# continue anyway, even if a test fail
|
# continue anyway, even if a test fail
|
||||||
$anyway=1;
|
$anyway=1;
|
||||||
}
|
}
|
||||||
|
elsif($ARGV[0] eq "-k") {
|
||||||
|
# keep stdout and stderr files after tests
|
||||||
|
$keepoutfiles=1;
|
||||||
|
}
|
||||||
elsif($ARGV[0] eq "-h") {
|
elsif($ARGV[0] eq "-h") {
|
||||||
# show help text
|
# show help text
|
||||||
print <<EOHELP
|
print <<EOHELP
|
||||||
@ -745,6 +754,7 @@ Usage: runtests.pl [options]
|
|||||||
-d display server debug info
|
-d display server debug info
|
||||||
-g run the test case with gdb
|
-g run the test case with gdb
|
||||||
-h this help text
|
-h this help text
|
||||||
|
-k keep stdout and stderr files present after tests
|
||||||
-s short output
|
-s short output
|
||||||
-v verbose output
|
-v verbose output
|
||||||
[num] like "5 6 9" or " 5 to 22 " to run those tests only
|
[num] like "5 6 9" or " 5 to 22 " to run those tests only
|
||||||
|
Loading…
x
Reference in New Issue
Block a user