Markus F.X.J. Oberhumer's patch that reduces memory usage quite a bit by
authorDaniel Stenberg <daniel@haxx.se>
Mon, 20 Jan 2003 12:52:34 +0000 (12:52 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 20 Jan 2003 12:52:34 +0000 (12:52 +0000)
only allocating the scratch memory buffer once it is needed and not always
in the handle.

lib/transfer.c
lib/url.c
lib/urldata.h

index 02eb7e20647e490acde0e8a9f50b453f5e002293..1e3fafc8d29f9597f1eca760427560892040b892 100644 (file)
@@ -964,6 +964,12 @@ CURLcode Curl_readwrite(struct connectdata *conn,
 
           /* convert LF to CRLF if so asked */
           if (data->set.crlf) {
+              if(data->state.scratch == NULL)
+                data->state.scratch = malloc(2*BUFSIZE);
+              if(data->state.scratch == NULL) {
+                failf (data, "Failed to alloc scratch buffer!");
+                return CURLE_OUT_OF_MEMORY;
+              }
             for(i = 0, si = 0; i < nread; i++, si++) {
               if (conn->upload_fromhere[i] == 0x0a) {
                 data->state.scratch[si++] = 0x0d;
index c743ed818a8f64c011657660efaedeb0719a2791..de5217d534dc63e43d4f41c29f10e018a53be145 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -190,6 +190,9 @@ CURLcode Curl_close(struct SessionHandle *data)
   if(data->state.auth_host)
     free(data->state.auth_host);
 
+  if(data->state.scratch)
+    free(data->state.scratch);
+
   if(data->change.proxy_alloc)
     free(data->change.proxy);
 
index d68e00998777926cd499a0812c03cf28d598c9b1..bd0c8002478369b71de2c0379228b19e2ed928e5 100644 (file)
@@ -598,7 +598,7 @@ struct UrlState {
   struct curl_ssl_session *session; /* array of 'numsessions' size */
   long sessionage;                  /* number of the most recent session */
 
-  char scratch[BUFSIZE*2]; /* huge buffer when doing upload CRLF replacing */
+  char *scratch; /* huge buffer[BUFSIZE*2] when doing upload CRLF replacing */
   bool errorbuf; /* Set to TRUE if the error buffer is already filled in.
                     This must be set to FALSE every time _easy_perform() is
                     called. */