From 781dd7a9bf3af985f16afd69e3d44abced5c49d5 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Fri, 9 Mar 2001 15:16:28 +0000
Subject: [PATCH] prefix changes curl_ to Curl_ made it work (partly) with
 persistant connections for HTTP/1.0 replies moved the 'newurl' struct field
 for Location: to the connectdata struct

---
 lib/transfer.c | 54 +++++++++++++++++++++++++-------------------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/lib/transfer.c b/lib/transfer.c
index 3816e7fb69..4bc6199949 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -107,7 +107,7 @@
    <butlerm@xmission.com>. */
 
 CURLcode static
-_Transfer(struct connectdata *c_conn)
+Transfer(struct connectdata *c_conn)
 {
   ssize_t nread;                /* number of bytes read */
   int bytecount = 0;            /* total number of bytes read */
@@ -142,9 +142,6 @@ _Transfer(struct connectdata *c_conn)
   char *buf;
   int maxfd;
 
-  if(!conn || (conn->handle != STRUCT_CONNECT))
-    return CURLE_BAD_FUNCTION_ARGUMENT;
-  
   data = conn->data; /* there's the root struct */
   buf = data->buffer;
   maxfd = (conn->sockfd>conn->writesockfd?conn->sockfd:conn->writesockfd)+1;
@@ -446,7 +443,7 @@ _Transfer(struct connectdata *c_conn)
                   ptr++;
                 backup = *ptr; /* store the ending letter */
                 *ptr = '\0';   /* zero terminate */
-                data->newurl = strdup(start); /* clone string */
+                conn->newurl = strdup(start); /* clone string */
                 *ptr = backup; /* restore ending letter */
               }
 
@@ -490,9 +487,9 @@ _Transfer(struct connectdata *c_conn)
                  write a piece of the body */
               if(conn->protocol&PROT_HTTP) {
                 /* HTTP-only checks */
-                if (data->newurl) {
+                if (conn->newurl) {
                   /* abort after the headers if "follow Location" is set */
-                  infof (data, "Follow to new URL: %s\n", data->newurl);
+                  infof (data, "Follow to new URL: %s\n", conn->newurl);
                   return CURLE_OK;
                 }
                 else if (data->resume_from &&
@@ -530,7 +527,8 @@ _Transfer(struct connectdata *c_conn)
                     } /* switch */
                   } /* two valid time strings */
                 } /* we have a time condition */
-                if(!conn->bits.close && (httpversion == 1)) {
+
+                if(!conn->bits.close) {
                   /* If this is not the last request before a close, we must
                      set the maximum download size to the size of the expected
                      document or else, we won't know when to stop reading! */
@@ -681,27 +679,27 @@ _Transfer(struct connectdata *c_conn)
   return CURLE_OK;
 }
 
-CURLcode curl_transfer(CURL *curl)
+CURLcode Curl_perform(CURL *curl)
 {
   CURLcode res;
-  struct UrlData *data = curl;
-  struct connectdata *c_connect=NULL;
+  struct UrlData *data = (struct UrlData *)curl;
+  struct connectdata *conn=NULL;
   bool port=TRUE; /* allow data->use_port to set port to use */
 
   Curl_pgrsStartNow(data);
 
   do {
     Curl_pgrsTime(data, TIMER_STARTSINGLE);
-    res = curl_connect(curl, (CURLconnect **)&c_connect, port);
+    res = Curl_connect(data, &conn, port);
     if(res == CURLE_OK) {
-      res = curl_do(c_connect);
+      res = Curl_do(conn);
       if(res == CURLE_OK) {
-        res = _Transfer(c_connect); /* now fetch that URL please */
+        res = Transfer(conn); /* now fetch that URL please */
         if(res == CURLE_OK)
-          res = curl_done(c_connect);
+          res = Curl_done(conn);
       }
 
-      if((res == CURLE_OK) && data->newurl) {
+      if((res == CURLE_OK) && conn->newurl) {
         /* Location: redirect
  
            This is assumed to happen for HTTP(S) only!
@@ -741,7 +739,7 @@ CURLcode curl_transfer(CURL *curl)
           data->bits.http_set_referer = TRUE; /* might have been false */
         }
 
-        if(2 != sscanf(data->newurl, "%15[^:]://%c", prot, &letter)) {
+        if(2 != sscanf(conn->newurl, "%15[^:]://%c", prot, &letter)) {
           /***
            *DANG* this is an RFC 2068 violation. The URL is supposed
            to be absolute and this doesn't seem to be that!
@@ -766,7 +764,7 @@ CURLcode curl_transfer(CURL *curl)
             protsep+=2; /* pass the slashes */
           }
 
-          if('/' != data->newurl[0]) {
+          if('/' != conn->newurl[0]) {
             /* First we need to find out if there's a ?-letter in the URL,
                and cut it and the right-side of that off */
             pathsep = strrchr(protsep, '?');
@@ -789,14 +787,14 @@ CURLcode curl_transfer(CURL *curl)
 
           newest=(char *)malloc( strlen(data->url) +
                                  1 + /* possible slash */
-                                 strlen(data->newurl) + 1/* zero byte */);
+                                 strlen(conn->newurl) + 1/* zero byte */);
 
           if(!newest)
             return CURLE_OUT_OF_MEMORY;
-          sprintf(newest, "%s%s%s", data->url, ('/' == data->newurl[0])?"":"/",
-                  data->newurl);
-          free(data->newurl);
-          data->newurl = newest;
+          sprintf(newest, "%s%s%s", data->url, ('/' == conn->newurl[0])?"":"/",
+                  conn->newurl);
+          free(conn->newurl);
+          conn->newurl = newest;
         }
         else {
           /* This is an absolute URL, don't use the custom port number */
@@ -807,8 +805,8 @@ CURLcode curl_transfer(CURL *curl)
           free(data->url);
       
         /* TBD: set the URL with curl_setopt() */
-        data->url = data->newurl;
-        data->newurl = NULL; /* don't show! */
+        data->url = conn->newurl;
+        conn->newurl = NULL; /* don't show! */
         data->bits.urlstringalloc = TRUE; /* the URL is allocated */
 
         infof(data, "Follows Location: to new URL: '%s'\n", data->url);
@@ -867,8 +865,10 @@ CURLcode curl_transfer(CURL *curl)
 
   } while(1); /* loop if Location: */
 
-  if(data->newurl)
-    free(data->newurl);
+  if(conn->newurl) {
+    free(conn->newurl);
+    conn->newurl = NULL;
+  }
 
   return res;
 }
-- 
GitLab