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]

Reply via email to