freebsd-ports/ftp/curl-hiphop/files/extra-patch-hiphop
Sunpoet Po-Chuan Hsieh 9857a44495 - Fix build with curl 7.32.0
Submitted by:	sunpoet (myself)
Approved by:	maintainer (no objection, via e-mail)
2013-10-06 18:46:28 +00:00

105 lines
2.9 KiB
Text

--- include/curl/multi.h.orig 2013-06-23 04:32:16.000000000 +0800
+++ include/curl/multi.h 2013-08-18 01:15:02.455786067 +0800
@@ -161,6 +161,19 @@
int *ret);
/*
+ * Name: curl_multi_select()
+ *
+ * Desc: Calls select() or poll() internally so app can call
+ * curl_multi_perform() as soon as one of them is ready. This is to
+ * fix FD_SETSIZE problem curl_multi_fdset() has.
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_select(CURLM *multi_handle,
+ int timeout_ms,
+ int *ret);
+
+ /*
* Name: curl_multi_perform()
*
* Desc: When the app thinks there's data available for curl it calls this
--- lib/multi.c.orig 2013-08-10 05:41:42.000000000 +0800
+++ lib/multi.c 2013-08-18 01:15:02.458784982 +0800
@@ -922,6 +922,80 @@
return CURLM_OK;
}
+CURLMcode curl_multi_select(CURLM *multi_handle, int timeout_ms, int *ret) {
+ struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
+ struct SessionHandle *easy;
+ curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
+ int bitmap;
+ int i;
+ unsigned int nfds = 0;
+ struct pollfd *ufds;
+ int nret = -1;
+
+ if(!GOOD_MULTI_HANDLE(multi))
+ return CURLM_BAD_HANDLE;
+
+ easy=multi->easyp->next;
+ while(easy != &multi->easyp) {
+ bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
+
+ for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
+ curl_socket_t s = CURL_SOCKET_BAD;
+
+ if(bitmap & GETSOCK_READSOCK(i)) {
+ ++nfds;
+ s = sockbunch[i];
+ }
+ if(bitmap & GETSOCK_WRITESOCK(i)) {
+ ++nfds;
+ s = sockbunch[i];
+ }
+ if(s == CURL_SOCKET_BAD) {
+ break;
+ }
+ }
+
+ easy = easy->next; /* check next handle */
+ }
+
+ ufds = (struct pollfd *)malloc(nfds * sizeof(struct pollfd));
+ nfds = 0;
+
+ easy=multi->easyp->next;
+ while(easy != &multi->easyp) {
+ bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
+
+ for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
+ curl_socket_t s = CURL_SOCKET_BAD;
+
+ if(bitmap & GETSOCK_READSOCK(i)) {
+ ufds[nfds].fd = sockbunch[i];
+ ufds[nfds].events = POLLIN;
+ ++nfds;
+ s = sockbunch[i];
+ }
+ if(bitmap & GETSOCK_WRITESOCK(i)) {
+ ufds[nfds].fd = sockbunch[i];
+ ufds[nfds].events = POLLOUT;
+ ++nfds;
+ s = sockbunch[i];
+ }
+ if(s == CURL_SOCKET_BAD) {
+ break;
+ }
+ }
+
+ easy = easy->next; /* check next handle */
+ }
+
+ nret = Curl_poll(ufds, nfds, timeout_ms);
+ free(ufds);
+ if (ret) {
+ *ret = nret;
+ }
+ return CURLM_OK;
+}
+
static CURLMcode multi_runsingle(struct Curl_multi *multi,
struct timeval now,
struct SessionHandle *easy)