X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=http.c;h=576740feff9ffa62b65f8cdf0a38f2354872c520;hb=af068d274245be9aedc58e6835c2e43329639974;hp=146cf7bf36d715ea410c0646d83c47148d426444;hpb=31262627109476c529418132e0820687003fb1fe;p=git.git diff --git a/http.c b/http.c index 146cf7bf3..576740fef 100644 --- a/http.c +++ b/http.c @@ -23,6 +23,7 @@ char *ssl_capath = NULL; char *ssl_cainfo = NULL; long curl_low_speed_limit = -1; long curl_low_speed_time = -1; +int curl_ftp_no_epsv = 0; struct curl_slist *pragma_header; @@ -34,7 +35,7 @@ size_t fread_buffer(void *ptr, size_t eltsize, size_t nmemb, size_t size = eltsize * nmemb; if (size > buffer->size - buffer->posn) size = buffer->size - buffer->posn; - memcpy(ptr, buffer->buffer + buffer->posn, size); + memcpy(ptr, (char *) buffer->buffer + buffer->posn, size); buffer->posn += size; return size; } @@ -49,7 +50,7 @@ size_t fwrite_buffer(const void *ptr, size_t eltsize, buffer->size = buffer->posn + size; buffer->buffer = xrealloc(buffer->buffer, buffer->size); } - memcpy(buffer->buffer + buffer->posn, ptr, size); + memcpy((char *) buffer->buffer + buffer->posn, ptr, size); buffer->posn += size; data_received++; return size; @@ -155,6 +156,11 @@ static int http_options(const char *var, const char *value) return 0; } + if (!strcmp("http.noepsv", var)) { + curl_ftp_no_epsv = git_config_bool(var, value); + return 0; + } + /* Fall back on the default ones */ return git_default_config(var, value); } @@ -196,6 +202,9 @@ static CURL* get_curl_handle(void) curl_easy_setopt(result, CURLOPT_USERAGENT, GIT_USER_AGENT); + if (curl_ftp_no_epsv) + curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0); + return result; } @@ -251,6 +260,9 @@ void http_init(void) max_requests = DEFAULT_MAX_REQUESTS; #endif + if (getenv("GIT_CURL_FTP_NO_EPSV")) + curl_ftp_no_epsv = 1; + #ifndef NO_CURL_EASY_DUPHANDLE curl_default = get_curl_handle(); #endif @@ -286,7 +298,8 @@ void http_cleanup(void) curl_multi_cleanup(curlm); #endif curl_global_cleanup(); - + + curl_slist_free_all(pragma_header); } struct active_request_slot *get_active_slot(void) @@ -438,11 +451,15 @@ void release_active_slot(struct active_request_slot *slot) { closedown_active_slot(slot); if (slot->curl) { +#ifdef USE_CURL_MULTI curl_multi_remove_handle(curlm, slot->curl); +#endif curl_easy_cleanup(slot->curl); slot->curl = NULL; } +#ifdef USE_CURL_MULTI fill_active_slots(); +#endif } static void finish_active_slot(struct active_request_slot *slot)