X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=libcurl.c;h=de205748dbd01855e5bc1bcc47d9990a78835f00;hp=2d95afbb0f590e625281e2f36a4fb1b2fc0cbda1;hb=1ff3bc8e953680793a28ea923f2d1e58cdf2c9f0;hpb=a2210a953016798b2e06aa10e45f13fb358788af diff --git a/libcurl.c b/libcurl.c index 2d95afbb..de205748 100644 --- a/libcurl.c +++ b/libcurl.c @@ -206,7 +206,7 @@ typedef struct downloadinfo_s CURL *curle; qboolean started; int loadtype; - unsigned long bytes_received; // for buffer + size_t bytes_received; // for buffer double bytes_received_curl; // for throttling double bytes_sent_curl; // for throttling struct downloadinfo_s *next, *prev; @@ -430,7 +430,10 @@ static size_t CURL_fwrite(void *data, size_t size, size_t nmemb, void *vdi) di->bytes_received += bytes; - return ret; // why not ret / nmemb? + return ret; + // Why not ret / nmemb? + // Because CURLOPT_WRITEFUNCTION docs say to return the number of bytes. + // Yes, this is incompatible to fwrite(2). } typedef enum @@ -595,7 +598,7 @@ static void Curl_EndDownload(downloadinfo *di, CurlStatus status, CURLcode error pixels = decode_image(di, content_type); if(pixels) - Draw_NewPic(p, image_width, image_height, true, pixels); + Draw_NewPic(p, image_width, image_height, pixels, TEXTYPE_BGRA, TEXF_ALPHA | TEXF_CLAMP); else CLEAR_AND_RETRY(); } @@ -612,7 +615,7 @@ static void Curl_EndDownload(downloadinfo *di, CurlStatus status, CURLcode error pixels = decode_image(di, content_type); if(pixels) - R_SkinFrame_LoadInternalBGRA(p, TEXF_FORCE_RELOAD | TEXF_MIPMAP | TEXF_ALPHA, pixels, image_width, image_height, false); // TODO what sRGB argument to put here? + R_SkinFrame_LoadInternalBGRA(p, TEXF_FORCE_RELOAD | TEXF_MIPMAP | TEXF_ALPHA, pixels, image_width, image_height, 0, 0, 0, false); // TODO what sRGB argument to put here? else CLEAR_AND_RETRY(); } @@ -878,7 +881,7 @@ static qboolean Curl_Begin(const char *URL, const char *extraheaders, double max if(loadtype != LOADTYPE_NONE) Host_Error("Curl_Begin: loadtype and buffer are both set"); - if(!curl_dll) + if(!curl_dll || !cl_curl_enabled.integer) { return false; } @@ -963,20 +966,21 @@ static qboolean Curl_Begin(const char *URL, const char *extraheaders, double max // already downloading the file? { - downloadinfo *di = Curl_Find(fn); - if(di) + downloadinfo *existingdownloadinfo = Curl_Find(fn); + if(existingdownloadinfo) { - Con_Printf("Can't download %s, already getting it from %s!\n", fn, CleanURL(di->url, urlbuf, sizeof(urlbuf))); + Con_Printf("Can't download %s, already getting it from %s!\n", fn, CleanURL(existingdownloadinfo->url, urlbuf, sizeof(urlbuf))); // however, if it was not for this map yet... - if(forthismap && !di->forthismap) + if(forthismap && !existingdownloadinfo->forthismap) { - di->forthismap = true; + existingdownloadinfo->forthismap = true; // this "fakes" a download attempt so the client will wait for // the download to finish and then reconnect ++numdownloads_added; } + if (curl_mutex) Thread_UnlockMutex(curl_mutex); return false; } } @@ -1000,6 +1004,7 @@ static qboolean Curl_Begin(const char *URL, const char *extraheaders, double max } } + if (curl_mutex) Thread_UnlockMutex(curl_mutex); return false; } else @@ -1007,10 +1012,10 @@ static qboolean Curl_Begin(const char *URL, const char *extraheaders, double max qfile_t *f = FS_OpenRealFile(fn, "rb", false); if(f) { - char buf[4] = {0}; - FS_Read(f, buf, sizeof(buf)); // no "-1", I will use memcmp + char b[4] = {0}; + FS_Read(f, b, sizeof(b)); // no "-1", I will use memcmp - if(memcmp(buf, "PK\x03\x04", 4) && memcmp(buf, "PACK", 4)) + if(memcmp(b, "PK\x03\x04", 4) && memcmp(b, "PACK", 4)) { Con_DPrintf("Detected non-PAK %s, clearing and NOT resuming.\n", fn); FS_Close(f); @@ -1226,7 +1231,7 @@ void Curl_Run(void) if(maxspeed > 0) { double bytes = bytes_sent + bytes_received; // maybe smoothen a bit? - curltime = realtime + bytes / (cl_curl_maxspeed.value * 1024.0); + curltime = realtime + bytes / (maxspeed * 1024.0); bytes_sent = 0; bytes_received = 0; } @@ -1773,7 +1778,7 @@ static qboolean Curl_SendRequirement(const char *filename, qboolean foundone, ch const char *thispack = FS_WhichPack(filename); const char *packurl; - if(!thispack) + if(!thispack || !*thispack) return false; p = strrchr(thispack, '/');