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;
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
// 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;
}
}
}
}
+ if (curl_mutex) Thread_UnlockMutex(curl_mutex);
return false;
}
else
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);
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;
}
const char *thispack = FS_WhichPack(filename);
const char *packurl;
- if(!thispack)
+ if(!thispack || !*thispack)
return false;
p = strrchr(thispack, '/');