git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Some curl versions lack curl_easy_duphandle()
@ 2005-10-14 22:39 Johannes Schindelin
  2005-10-15  5:49 ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2005-10-14 22:39 UTC (permalink / raw)
  To: git, junkio

This patch looks bigger than it really is: The code to get the default handle
was refactored into a function, and is called instead of curl_easy_duphandle()
if that does not exist.

Tested once.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>

---

 http-fetch.c |   73 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 49 insertions(+), 24 deletions(-)

applies-to: 63f8082177fa17ae2aadd5ab417758f3d53456d8
1d9c990c46e306b6310fda8ff94bca2feccfbd99
diff --git a/http-fetch.c b/http-fetch.c
index 0aba891..5f1f7f9 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -18,6 +18,10 @@
 #define curl_global_init(a) do { /* nothing */ } while(0)
 #endif
 
+#if LIBCURL_VERSION_NUM < 0x070c04
+#define NO_CURL_EASY_DUPHANDLE
+#endif
+
 #define PREV_BUF_SIZE 4096
 #define RANGE_HEADER_SIZE 30
 
@@ -28,7 +32,9 @@ static int data_received;
 static int max_requests = DEFAULT_MAX_REQUESTS;
 static CURLM *curlm;
 #endif
+#ifndef NO_CURL_EASY_DUPHANDLE
 static CURL *curl_default;
+#endif
 static struct curl_slist *pragma_header;
 static struct curl_slist *no_pragma_header;
 static struct curl_slist *no_range_header;
@@ -87,8 +93,12 @@ static struct active_request_slot *activ
 
 static int curl_ssl_verify;
 static char *ssl_cert;
+#if LIBCURL_VERSION_NUM >= 0x070902
 static char *ssl_key;
+#endif
+#if LIBCURL_VERSION_NUM >= 0x070908
 static char *ssl_capath;
+#endif
 static char *ssl_cainfo;
 
 struct buffer
@@ -143,6 +153,37 @@ void process_curl_messages();
 void process_request_queue();
 #endif
 
+CURL* get_curl_handle()
+{
+	CURL* result = curl_easy_init();
+
+	curl_ssl_verify = getenv("GIT_SSL_NO_VERIFY") ? 0 : 1;
+	curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, curl_ssl_verify);
+#if LIBCURL_VERSION_NUM >= 0x070907
+	curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+#endif
+
+	if ((ssl_cert = getenv("GIT_SSL_CERT")) != NULL) {
+		curl_easy_setopt(result, CURLOPT_SSLCERT, ssl_cert);
+	}
+#if LIBCURL_VERSION_NUM >= 0x070902
+	if ((ssl_key = getenv("GIT_SSL_KEY")) != NULL) {
+		curl_easy_setopt(result, CURLOPT_SSLKEY, ssl_key);
+	}
+#endif
+#if LIBCURL_VERSION_NUM >= 0x070908
+	if ((ssl_capath = getenv("GIT_SSL_CAPATH")) != NULL) {
+		curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
+	}
+#endif
+	if ((ssl_cainfo = getenv("GIT_SSL_CAINFO")) != NULL) {
+		curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
+	}
+	curl_easy_setopt(result, CURLOPT_FAILONERROR, 1);
+
+	return result;
+}
+
 struct active_request_slot *get_active_slot()
 {
 	struct active_request_slot *slot = active_queue_head;
@@ -165,7 +206,11 @@ struct active_request_slot *get_active_s
 	}
 	if (slot == NULL) {
 		newslot = xmalloc(sizeof(*newslot));
+#ifdef NO_CURL_EASY_DUPHANDLE
+		newslot->curl = get_curl_handle();
+#else
 		newslot->curl = curl_easy_duphandle(curl_default);
+#endif
 		newslot->in_use = 0;
 		newslot->next = NULL;
 
@@ -1098,32 +1143,10 @@ int main(int argc, char **argv)
 	no_pragma_header = curl_slist_append(no_pragma_header, "Pragma:");
 	no_range_header = curl_slist_append(no_range_header, "Range:");
 
-	curl_default = curl_easy_init();
-
-	curl_ssl_verify = getenv("GIT_SSL_NO_VERIFY") ? 0 : 1;
-	curl_easy_setopt(curl_default, CURLOPT_SSL_VERIFYPEER, curl_ssl_verify);
-#if LIBCURL_VERSION_NUM >= 0x070907
-	curl_easy_setopt(curl_default, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+#ifndef NO_CURL_EASY_DUPHANDLE
+	curl_default = get_curl_handle();
 #endif
 
-	if ((ssl_cert = getenv("GIT_SSL_CERT")) != NULL) {
-		curl_easy_setopt(curl_default, CURLOPT_SSLCERT, ssl_cert);
-	}
-#if LIBCURL_VERSION_NUM >= 0x070902
-	if ((ssl_key = getenv("GIT_SSL_KEY")) != NULL) {
-		curl_easy_setopt(curl_default, CURLOPT_SSLKEY, ssl_key);
-	}
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
-	if ((ssl_capath = getenv("GIT_SSL_CAPATH")) != NULL) {
-		curl_easy_setopt(curl_default, CURLOPT_CAPATH, ssl_capath);
-	}
-#endif
-	if ((ssl_cainfo = getenv("GIT_SSL_CAINFO")) != NULL) {
-		curl_easy_setopt(curl_default, CURLOPT_CAINFO, ssl_cainfo);
-	}
-	curl_easy_setopt(curl_default, CURLOPT_FAILONERROR, 1);
-
 	alt = xmalloc(sizeof(*alt));
 	alt->base = url;
 	alt->got_indices = 0;
@@ -1137,7 +1160,9 @@ int main(int argc, char **argv)
 	curl_slist_free_all(pragma_header);
 	curl_slist_free_all(no_pragma_header);
 	curl_slist_free_all(no_range_header);
+#ifndef NO_CURL_EASY_DUPHANDLE
 	curl_easy_cleanup(curl_default);
+#endif
 	slot = active_queue_head;
 	while (slot != NULL) {
 		curl_easy_cleanup(slot->curl);
---
0.99.8.GIT

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Some curl versions lack curl_easy_duphandle()
  2005-10-14 22:39 [PATCH] Some curl versions lack curl_easy_duphandle() Johannes Schindelin
@ 2005-10-15  5:49 ` Junio C Hamano
  2005-10-15 11:50   ` Johannes Schindelin
  0 siblings, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2005-10-15  5:49 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Nick Hengeveld, git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> This patch looks bigger than it really is: The code to get the
> default handle was refactored into a function, and is called
> instead of curl_easy_duphandle() if that does not exist.

I'd like to take Nick's config file patch first, which
unfortunately interferes with your patch.  I'd hate to ask you
this, but could you rebase it on top of Nick's patch, and...

> Tested once.

maybe repost after some more testing?  And I'd like to ask
either Nick or Daniel to give an ack on the rebased one.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Some curl versions lack curl_easy_duphandle()
  2005-10-15  5:49 ` Junio C Hamano
@ 2005-10-15 11:50   ` Johannes Schindelin
  2005-10-16 21:50     ` Nick Hengeveld
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2005-10-15 11:50 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Nick Hengeveld, git

Hi,

On Fri, 14 Oct 2005, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > This patch looks bigger than it really is: The code to get the
> > default handle was refactored into a function, and is called
> > instead of curl_easy_duphandle() if that does not exist.
> 
> I'd like to take Nick's config file patch first, which
> unfortunately interferes with your patch.  I'd hate to ask you
> this, but could you rebase it on top of Nick's patch, [...]

No need to hate it. Here comes the rebased patch, and this time, I 
actually tested it a bit.

---

diff --git a/http-fetch.c b/http-fetch.c
index 784aedf..40bd0b4 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -18,6 +18,10 @@
 #define curl_global_init(a) do { /* nothing */ } while(0)
 #endif
 
+#if LIBCURL_VERSION_NUM < 0x070c04
+#define NO_CURL_EASY_DUPHANDLE
+#endif
+
 #define PREV_BUF_SIZE 4096
 #define RANGE_HEADER_SIZE 30
 
@@ -28,7 +32,9 @@ static int data_received;
 static int max_requests = -1;
 static CURLM *curlm;
 #endif
+#ifndef NO_CURL_EASY_DUPHANDLE
 static CURL *curl_default;
+#endif
 static struct curl_slist *pragma_header;
 static struct curl_slist *no_pragma_header;
 static struct curl_slist *no_range_header;
@@ -87,8 +93,12 @@ static struct active_request_slot *activ
 
 static int curl_ssl_verify = -1;
 static char *ssl_cert = NULL;
+#if LIBCURL_VERSION_NUM >= 0x070902
 static char *ssl_key = NULL;
+#endif
+#if LIBCURL_VERSION_NUM >= 0x070908
 static char *ssl_capath = NULL;
+#endif
 static char *ssl_cainfo = NULL;
 
 struct buffer
@@ -213,6 +223,32 @@ void process_curl_messages();
 void process_request_queue();
 #endif
 
+static CURL* get_curl_handle()
+{
+	CURL* result = curl_easy_init();
+
+	curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, curl_ssl_verify);
+#if LIBCURL_VERSION_NUM >= 0x070907
+	curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+#endif
+
+	if (ssl_cert != NULL)
+		curl_easy_setopt(result, CURLOPT_SSLCERT, ssl_cert);
+#if LIBCURL_VERSION_NUM >= 0x070902
+	if (ssl_key != NULL)
+		curl_easy_setopt(result, CURLOPT_SSLKEY, ssl_key);
+#endif
+#if LIBCURL_VERSION_NUM >= 0x070908
+	if (ssl_capath != NULL)
+		curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
+#endif
+	if (ssl_cainfo != NULL)
+		curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
+	curl_easy_setopt(result, CURLOPT_FAILONERROR, 1);
+
+	return result;
+}
+
 struct active_request_slot *get_active_slot()
 {
 	struct active_request_slot *slot = active_queue_head;
@@ -235,7 +271,11 @@ struct active_request_slot *get_active_s
 	}
 	if (slot == NULL) {
 		newslot = xmalloc(sizeof(*newslot));
+#ifdef NO_CURL_EASY_DUPHANDLE
+		newslot->curl = get_curl_handle();
+#else
 		newslot->curl = curl_easy_duphandle(curl_default);
+#endif
 		newslot->in_use = 0;
 		newslot->next = NULL;
 
@@ -1202,24 +1242,10 @@ int main(int argc, char **argv)
 	no_pragma_header = curl_slist_append(no_pragma_header, "Pragma:");
 	no_range_header = curl_slist_append(no_range_header, "Range:");
 
-	curl_default = curl_easy_init();
-
-	curl_easy_setopt(curl_default, CURLOPT_SSL_VERIFYPEER, curl_ssl_verify);
-#if LIBCURL_VERSION_NUM >= 0x070907
-	curl_easy_setopt(curl_default, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+#ifndef NO_CURL_EASY_DUPHANDLE
+	curl_default = get_curl_handle();
 #endif
 
-	if (ssl_cert != NULL)
-		curl_easy_setopt(curl_default, CURLOPT_SSLCERT, ssl_cert);
-	if (ssl_key != NULL)
-		curl_easy_setopt(curl_default, CURLOPT_SSLKEY, ssl_key);
-	if (ssl_capath != NULL)
-		curl_easy_setopt(curl_default, CURLOPT_CAPATH, ssl_capath);
-	if (ssl_cainfo != NULL)
-		curl_easy_setopt(curl_default, CURLOPT_CAINFO, ssl_cainfo);
-
-	curl_easy_setopt(curl_default, CURLOPT_FAILONERROR, 1);
-
 	alt = xmalloc(sizeof(*alt));
 	alt->base = url;
 	alt->got_indices = 0;
@@ -1233,7 +1259,9 @@ int main(int argc, char **argv)
 	curl_slist_free_all(pragma_header);
 	curl_slist_free_all(no_pragma_header);
 	curl_slist_free_all(no_range_header);
+#ifndef NO_CURL_EASY_DUPHANDLE
 	curl_easy_cleanup(curl_default);
+#endif
 	slot = active_queue_head;
 	while (slot != NULL) {
 		curl_easy_cleanup(slot->curl);

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Some curl versions lack curl_easy_duphandle()
  2005-10-15 11:50   ` Johannes Schindelin
@ 2005-10-16 21:50     ` Nick Hengeveld
  2005-10-16 21:58       ` Johannes Schindelin
  2005-10-17 18:01       ` Nick Hengeveld
  0 siblings, 2 replies; 7+ messages in thread
From: Nick Hengeveld @ 2005-10-16 21:50 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, git

On Sat, Oct 15, 2005 at 01:50:16PM +0200, Johannes Schindelin wrote:

> +#if LIBCURL_VERSION_NUM < 0x070c04
> +#define NO_CURL_EASY_DUPHANDLE
> +#endif

Is that the correct version number?  I've been using 7.10.6 and 
curl_easy_duphandle() has been working fine.

-- 
For a successful technology, reality must take precedence over public
relations, for nature cannot be fooled.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Some curl versions lack curl_easy_duphandle()
  2005-10-16 21:50     ` Nick Hengeveld
@ 2005-10-16 21:58       ` Johannes Schindelin
  2005-10-17 18:01       ` Nick Hengeveld
  1 sibling, 0 replies; 7+ messages in thread
From: Johannes Schindelin @ 2005-10-16 21:58 UTC (permalink / raw)
  To: Nick Hengeveld; +Cc: Junio C Hamano, git

Hi,

On Sun, 16 Oct 2005, Nick Hengeveld wrote:

> On Sat, Oct 15, 2005 at 01:50:16PM +0200, Johannes Schindelin wrote:
> 
> > +#if LIBCURL_VERSION_NUM < 0x070c04
> > +#define NO_CURL_EASY_DUPHANDLE
> > +#endif
> 
> Is that the correct version number?  I've been using 7.10.6 and 
> curl_easy_duphandle() has been working fine.

I looked into CVS to find when curl_easy_duphandle() was introduced, and 
it was Nov 9, 2004. So I looked for the corresponding curl.h and found it 
says 0x070c04. I will look again...

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Some curl versions lack curl_easy_duphandle()
  2005-10-16 21:50     ` Nick Hengeveld
  2005-10-16 21:58       ` Johannes Schindelin
@ 2005-10-17 18:01       ` Nick Hengeveld
  2005-10-17 18:54         ` Johannes Schindelin
  1 sibling, 1 reply; 7+ messages in thread
From: Nick Hengeveld @ 2005-10-17 18:01 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, git

On Sun, Oct 16, 2005 at 02:50:18PM -0700, Nick Hengeveld wrote:

> Is that the correct version number?  I've been using 7.10.6 and 
> curl_easy_duphandle() has been working fine.

Apart from the version number question, this patch looks good.  Although
I'm now wondering whether it makes sense to bother trying to use
curl_easy_duphandle() at all and always use get_curl_handle() instead.

-- 
For a successful technology, reality must take precedence over public
relations, for nature cannot be fooled.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Some curl versions lack curl_easy_duphandle()
  2005-10-17 18:01       ` Nick Hengeveld
@ 2005-10-17 18:54         ` Johannes Schindelin
  0 siblings, 0 replies; 7+ messages in thread
From: Johannes Schindelin @ 2005-10-17 18:54 UTC (permalink / raw)
  To: Nick Hengeveld; +Cc: Junio C Hamano, git

Hi,

On Mon, 17 Oct 2005, Nick Hengeveld wrote:

> On Sun, Oct 16, 2005 at 02:50:18PM -0700, Nick Hengeveld wrote:
> 
> > Is that the correct version number?  I've been using 7.10.6 and 
> > curl_easy_duphandle() has been working fine.
> 
> Apart from the version number question, this patch looks good.

Aaargh! Of course I was looking at the annotate output, which said Nov 9, 
2004. But this is just the last change to the signature of the function!

So, AFAIK Sep 13, 2001, is the correct date, and 0x070900 is the version.

>  Although I'm now wondering whether it makes sense to bother trying to 
> use curl_easy_duphandle() at all and always use get_curl_handle() 
> instead.

There might well be a substantial overhead involved. I haven't measured 
it, but it seems reasonable to assume that duplicating a handle is 
implemented using a shorter code path than creating a handle all over 
again.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-10-17 18:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-14 22:39 [PATCH] Some curl versions lack curl_easy_duphandle() Johannes Schindelin
2005-10-15  5:49 ` Junio C Hamano
2005-10-15 11:50   ` Johannes Schindelin
2005-10-16 21:50     ` Nick Hengeveld
2005-10-16 21:58       ` Johannes Schindelin
2005-10-17 18:01       ` Nick Hengeveld
2005-10-17 18:54         ` Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).