8ea9060d3944ce427e6485c356edc26d7dafb8d3 jcasper Wed Sep 25 15:57:16 2024 -0700 fakeCurl needn't open the same file repeatedly for requests to the same URL, refs #34493 diff --git src/hg/inc/fakeCurl.h src/hg/inc/fakeCurl.h index da3bd39..7719f15 100644 --- src/hg/inc/fakeCurl.h +++ src/hg/inc/fakeCurl.h @@ -1,57 +1,59 @@ #ifndef FAKE_CURL #define FAKE_CURL #define CURL fakeCURL #define curl_easy_init fake_curl_easy_init #define curl_easy_setopt fake_curl_easy_setopt #define curl_easy_perform fake_curl_easy_perform #define curl_easy_strerror fake_curl_easy_strerror #define curl_easy_cleanup fake_curl_easy_cleanup #define CURLoption fakeCURLoption #define CURLOPT_URL fakeCURLOPT_URL #define CURLOPT_FOLLOWLOCATION fakeCURLOPT_FOLLOWLOCATION #define CURLOPT_USERAGENT fakeCURLOPT_USERAGENT #define CURLOPT_WRITEFUNCTION fakeCURLOPT_WRITEFUNCTION #define CURLOPT_WRITEDATA fakeCURLOPT_WRITEDATA #define CURLOPT_HEADERFUNCTION fakeCURLOPT_HEADERFUNCTION #define CURLOPT_RANGE fakeCURLOPT_RANGE #define CURLOPT_FAILONERROR fakeCURLOPT_FAILONERROR #define CURLcode fakeCURLcode #define CURLE_OK fakeCURLE_OK #define CURLE_NOTOK fakeCURLE_NOTOK typedef enum { CURLOPT_WRITEDATA, CURLOPT_RANGE, CURLOPT_WRITEFUNCTION, CURLOPT_URL, CURLOPT_FOLLOWLOCATION, CURLOPT_USERAGENT, CURLOPT_HEADERFUNCTION, CURLOPT_FAILONERROR } CURLoption; typedef enum { CURLE_OK, CURLE_NOTOK } CURLcode; typedef struct { char *url; char *range; void *writeBuffer; size_t (*WriteFunction) (char *buffer, size_t size, size_t nitems, void *outstream); size_t (*HeaderFunction) (char *buffer, size_t size, size_t nitems, void *outstream); int failonerror; // currently ignoring follow location setting and user agent string - we always follow, no string + struct udcFile *udc; // As long as we're querying the same URL, keep the udcFile open and just seek + long udcSize; // to simplify repeated checks against udcFileSize } CURL; typedef size_t (*curl_write_callback)(char *buffer, size_t size, size_t nitems, void *outstream); CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); CURLcode curl_easy_perform(CURL *curl); const char *curl_easy_strerror(CURLcode errornum); CURL *curl_easy_init(void); void curl_easy_cleanup(CURL *curl); #endif