On Tue, 1 May 2001, Stanislav Malyshev wrote: > AG>> You need to get the latest CVS of curl itself. The header files > AG>> have changed. Sterling posted diff's. Andi > > Ugh. I see. Will it work with some release of CURL on the start (or at > least the end) of 4.0.6 cycle? Because releasing product depending on CVS > version of something is ... well, not too good. > Yes. I'm trying to co-ordinate this with the cURL folks. Till then an updated patch is attached. Apply this against the cURL cvs and all should be happy. -sterling
? configure ? diffs ? Makefile.in ? aclocal.m4 ? config.h.in ? curl_diff_correct ? buildconf ? docs/Makefile.in ? docs/examples/Makefile.in ? include/Makefile.in ? include/curl/Makefile.in ? lib/Makefile.in ? packages/Makefile.in ? packages/Linux/Makefile.in ? packages/Linux/RPM/Makefile.in ? packages/Win32/Makefile.in ? perl/Makefile.in ? perl/Curl_easy/Makefile.in ? php/Makefile.in ? php/examples/Makefile.in ? src/Makefile.in ? tests/Makefile.in ? tests/data/Makefile.in Index: include/curl/curl.h =================================================================== RCS file: /cvsroot/curl/include/curl/curl.h,v retrieving revision 1.75 diff -u -r1.75 curl.h --- include/curl/curl.h 2001/04/23 07:34:55 1.75 +++ include/curl/curl.h 2001/04/30 16:44:22 @@ -73,12 +73,14 @@ size_t ultotal, size_t ulnow); -typedef size_t (*curl_write_callback)(char *buffer, +typedef size_t (*curl_write_callback)(void *ctx, + char *buffer, size_t size, size_t nitems, FILE *outstream); -typedef size_t (*curl_read_callback)(char *buffer, +typedef size_t (*curl_read_callback)(void *ctx, + char *buffer, size_t size, size_t nitems, FILE *instream); @@ -434,6 +436,16 @@ /* Function that will be called to store headers (instead of fwrite). The * parameters will use fwrite() syntax, make sure to follow them. */ CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), + + /* The write function context, data to be passed along to the write function */ + CINIT(WRITEFUNCTIONDATA, OBJECTPOINT, 80), + + /* The read function context, data to be passed along to the read function */ + CINIT(READFUNCTIONDATA, OBJECTPOINT, 81), + + /* The header function context, data to be passed along to the write header + * function */ + CINIT(HEADERFUNCTIONDATA, OBJECTPOINT, 82), CURLOPT_LASTENTRY /* the last unusued */ } CURLoption; Index: lib/formdata.c =================================================================== RCS file: /cvsroot/curl/lib/formdata.c,v retrieving revision 1.14 diff -u -r1.14 formdata.c --- lib/formdata.c 2001/04/06 05:52:23 1.14 +++ lib/formdata.c 2001/04/30 16:44:25 @@ -554,7 +554,8 @@ } /* fread() emulation */ -int Curl_FormReader(char *buffer, +int Curl_FormReader(void *ctx, + char *buffer, size_t size, size_t nitems, FILE *mydata) Index: lib/formdata.h =================================================================== RCS file: /cvsroot/curl/lib/formdata.h,v retrieving revision 1.5 diff -u -r1.5 formdata.h --- lib/formdata.h 2001/01/05 10:11:42 1.5 +++ lib/formdata.h 2001/04/30 16:44:25 @@ -42,7 +42,8 @@ int *size); /* fread() emulation */ -int Curl_FormReader(char *buffer, +int Curl_FormReader(void *ctx, + char *buffer, size_t size, size_t nitems, FILE *mydata); Index: lib/ftp.c =================================================================== RCS file: /cvsroot/curl/lib/ftp.c,v retrieving revision 1.66 diff -u -r1.66 ftp.c --- lib/ftp.c 2001/04/26 10:29:24 1.66 +++ lib/ftp.c 2001/04/30 16:44:35 @@ -1484,7 +1484,7 @@ readthisamountnow = BUFSIZE; actuallyread = - data->fread(data->buffer, 1, readthisamountnow, data->in); + data->fread(data->fread_ctx, data->buffer, 1, readthisamountnow, +data->in); passed += actuallyread; if(actuallyread != readthisamountnow) { Index: lib/http.c =================================================================== RCS file: /cvsroot/curl/lib/http.c,v retrieving revision 1.60 diff -u -r1.60 http.c --- lib/http.c 2001/04/18 07:25:11 1.60 +++ lib/http.c 2001/04/30 16:44:40 @@ -529,7 +529,7 @@ readthisamountnow = BUFSIZE; actuallyread = - data->fread(data->buffer, 1, readthisamountnow, data->in); + data->fread(data->fread_ctx, data->buffer, 1, readthisamountnow, data->in); passed += actuallyread; if(actuallyread != readthisamountnow) { @@ -719,7 +719,7 @@ http->in = data->in; /* backup */ data->fread = - (size_t (*)(char *, size_t, size_t, FILE *)) + (size_t (*)(void *, char *, size_t, size_t, FILE *)) Curl_FormReader; /* set the read function to read from the generated form data */ data->in = (FILE *)&http->form; Index: lib/sendf.c =================================================================== RCS file: /cvsroot/curl/lib/sendf.c,v retrieving revision 1.23 diff -u -r1.23 sendf.c --- lib/sendf.c 2001/04/10 06:49:33 1.23 +++ lib/sendf.c 2001/04/30 16:44:42 @@ -229,7 +229,7 @@ len = strlen(ptr); if(type & CLIENTWRITE_BODY) { - wrote = data->fwrite(ptr, 1, len, data->out); + wrote = data->fwrite(data->fwrite_ctx, ptr, 1, len, data->out); if(wrote != len) { failf (data, "Failed writing body"); return CURLE_WRITE_ERROR; @@ -243,7 +243,7 @@ curl_write_callback writeit= data->fwrite_header?data->fwrite_header:data->fwrite; - wrote = writeit(ptr, 1, len, data->writeheader); + wrote = writeit(data->fwrite_header_ctx, ptr, 1, len, data->writeheader); if(wrote != len) { failf (data, "Failed writing header"); return CURLE_WRITE_ERROR; Index: lib/transfer.c =================================================================== RCS file: /cvsroot/curl/lib/transfer.c,v retrieving revision 1.36 diff -u -r1.36 transfer.c --- lib/transfer.c 2001/04/27 18:03:44 1.36 +++ lib/transfer.c 2001/04/30 16:44:48 @@ -660,7 +660,7 @@ if(data->crlf) buf = data->buffer; /* put it back on the buffer */ - nread = data->fread(buf, 1, conn->upload_bufsize, data->in); + nread = data->fread(data->fread_ctx, buf, 1, conn->upload_bufsize, +data->in); /* the signed int typecase of nread of for systems that has unsigned size_t */ Index: lib/url.c =================================================================== RCS file: /cvsroot/curl/lib/url.c,v retrieving revision 1.119 diff -u -r1.119 url.c --- lib/url.c 2001/04/27 08:02:10 1.119 +++ lib/url.c 2001/04/30 16:45:00 @@ -187,6 +187,15 @@ return 0; /* success */ } +static size_t curl_write(void *ctx, char *data, size_t size, size_t nmemb, FILE *fp) +{ + return fwrite(data, size, nmemb, fp); +} + +static size_t curl_read(void *ctx, char *data, size_t size, size_t nmemb, FILE *fp) +{ + return fread(data, size, nmemb, fp); +} CURLcode Curl_open(CURL **curl, char *url) { @@ -214,12 +223,14 @@ data->out = stdout; /* default output to stdout */ data->in = stdin; /* default input from stdin */ 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; - /* use fread as default function to read input */ - data->fread = (size_t (*)(char *, size_t, size_t, FILE *))fread; + /* use custom callback, which is a wrapper around fwrite, + as default function to store output */ + data->fwrite = (size_t (*)(void *, char *, size_t, size_t, FILE *))curl_write; + + /* use custom callback, which is a wrapper around fread, + as default function to read input */ + data->fread = (size_t (*)(void *, char *, size_t, size_t, FILE *))curl_read; /* set the default passwd function */ data->fpasswd = my_getpass; @@ -712,17 +723,35 @@ */ data->err = va_arg(param, FILE *); break; + case CURLOPT_HEADERFUNCTIONDATA: + /* + * Set the header write context data + */ + data->fwrite_header_ctx = va_arg(param, void *); + break; case CURLOPT_HEADERFUNCTION: /* * Set header write callback */ data->fwrite_header = va_arg(param, curl_write_callback); break; + case CURLOPT_WRITEFUNCTIONDATA: + /* + * Set context data for the write function + */ + data->fwrite_ctx = va_arg(param, void *); + break; case CURLOPT_WRITEFUNCTION: /* * Set data write callback */ data->fwrite = va_arg(param, curl_write_callback); + break; + case CURLOPT_READFUNCTIONDATA: + /* + * Set context data for the read function + */ + data->fread_ctx = va_arg(param, void *); break; case CURLOPT_READFUNCTION: /* Index: lib/urldata.h =================================================================== RCS file: /cvsroot/curl/lib/urldata.h,v retrieving revision 1.60 diff -u -r1.60 urldata.h --- lib/urldata.h 2001/04/18 07:25:11 1.60 +++ lib/urldata.h 2001/04/30 16:45:03 @@ -148,7 +148,7 @@ /* For FORM posting */ struct Form form; - size_t (*storefread)(char *, size_t , size_t , FILE *); + size_t (*storefread)(void *ctx, char *, size_t , size_t , FILE *); FILE *in; struct Curl_chunker chunk; @@ -489,13 +489,16 @@ char *device; /* Interface to use */ /* function that stores the output:*/ - curl_write_callback fwrite; + void *fwrite_ctx; + curl_write_callback fwrite; /* optional function that stores the header output:*/ - curl_write_callback fwrite_header; + void *fwrite_header_ctx; + curl_write_callback fwrite_header; /* function that reads the input:*/ - curl_read_callback fread; + void *fread_ctx; + curl_read_callback fread; /* function that wants progress information */ curl_progress_callback fprogress; Index: src/main.c =================================================================== RCS file: /cvsroot/curl/src/main.c,v retrieving revision 1.76 diff -u -r1.76 main.c --- src/main.c 2001/04/18 14:06:47 1.76 +++ src/main.c 2001/04/30 16:45:14 @@ -1268,7 +1268,7 @@ struct Configurable *config; }; -int my_fwrite(void *buffer, size_t size, size_t nmemb, FILE *stream) +int my_fwrite(void *ctx, void *buffer, size_t size, size_t nmemb, FILE *stream) { struct OutStruct *out=(struct OutStruct *)stream; if(out && !out->stream) {
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]