'FILE *' changed to 'void *' in all callback functions

This commit is contained in:
Daniel Stenberg 2001-05-04 07:47:11 +00:00
parent 53e0c1b1a6
commit 9304055df5
6 changed files with 59 additions and 59 deletions

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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) */

View File

@ -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) {

View File

@ -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