mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-01-24 19:32:07 +03:00
Refactor the fdset acquisition into the fetchers to stop fetch.c including curl.h
This commit is contained in:
parent
ab6c03f311
commit
a468b40990
@ -39,7 +39,6 @@
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
#include <libwapcaplet/libwapcaplet.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/corestrings.h"
|
||||
@ -386,8 +385,7 @@ nserror fetcher_fdset(fd_set *read_fd_set,
|
||||
fd_set *except_fd_set,
|
||||
int *maxfd_out)
|
||||
{
|
||||
CURLMcode code;
|
||||
int maxfd;
|
||||
int maxfd = -1;
|
||||
int fetcherd; /* fetcher index */
|
||||
|
||||
if (!fetch_dispatch_jobs()) {
|
||||
@ -408,12 +406,19 @@ nserror fetcher_fdset(fd_set *read_fd_set,
|
||||
FD_ZERO(read_fd_set);
|
||||
FD_ZERO(write_fd_set);
|
||||
FD_ZERO(except_fd_set);
|
||||
code = curl_multi_fdset(fetch_curl_multi,
|
||||
read_fd_set,
|
||||
write_fd_set,
|
||||
except_fd_set,
|
||||
&maxfd);
|
||||
assert(code == CURLM_OK);
|
||||
|
||||
for (fetcherd = 0; fetcherd < MAX_FETCHERS; fetcherd++) {
|
||||
if ((fetchers[fetcherd].refcount > 0) &&
|
||||
(fetchers[fetcherd].ops.fdset != NULL)) {
|
||||
/* fetcher present */
|
||||
int fetcher_maxfd;
|
||||
fetcher_maxfd = fetchers[fetcherd].ops.fdset(
|
||||
fetchers[fetcherd].scheme, read_fd_set,
|
||||
write_fd_set, except_fd_set);
|
||||
if (fetcher_maxfd > maxfd)
|
||||
maxfd = fetcher_maxfd;
|
||||
}
|
||||
}
|
||||
|
||||
if (maxfd >= 0) {
|
||||
/* change the scheduled poll to happen is a 1000ms as
|
||||
|
@ -90,6 +90,12 @@ struct fetcher_operation_table {
|
||||
*/
|
||||
void (*poll)(lwc_string *scheme);
|
||||
|
||||
/**
|
||||
* update an fdset with the FDs needed to poll cleanly
|
||||
*/
|
||||
int (*fdset)(lwc_string *scheme, fd_set *read_set, fd_set *write_set,
|
||||
fd_set *error_set);
|
||||
|
||||
/**
|
||||
* Finalise the fetcher.
|
||||
*/
|
||||
|
@ -1374,6 +1374,23 @@ fetch_curl_header(char *data, size_t size, size_t nmemb, void *_f)
|
||||
#undef SKIP_ST
|
||||
}
|
||||
|
||||
static int fetch_curl_fdset(lwc_string *scheme, fd_set *read_set,
|
||||
fd_set *write_set, fd_set *error_set)
|
||||
{
|
||||
CURLMcode code;
|
||||
int maxfd = -1;
|
||||
|
||||
code = curl_multi_fdset(fetch_curl_multi,
|
||||
read_set,
|
||||
write_set,
|
||||
error_set,
|
||||
&maxfd);
|
||||
assert(code == CURLM_OK);
|
||||
|
||||
return maxfd;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* exported function documented in content/fetchers/curl.h */
|
||||
nserror fetch_curl_register(void)
|
||||
@ -1390,6 +1407,7 @@ nserror fetch_curl_register(void)
|
||||
.abort = fetch_curl_abort,
|
||||
.free = fetch_curl_free,
|
||||
.poll = fetch_curl_poll,
|
||||
.fdset = fetch_curl_fdset,
|
||||
.finalise = fetch_curl_finalise
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user