static qbool QTVList_Cache_File_Is_Old(void) { SYSTEMTIME cache_time; SYSTEMTIME min_time; // minimum required time int diff; GetFileLocalTime(va("%s/%s/%s", com_basedir, QTVLIST_CACHE_FILE_DIR, QTVLIST_CACHE_FILE), &cache_time); GetLocalTime(&min_time); // subtract 7 days if (min_time.wDay > 7) { min_time.wDay -= 7; } else { // approximately 7 days in this case // let's not bother if a month has 28, 29, 30 or 31 days if (min_time.wMonth > 1) { min_time.wMonth -= 1; min_time.wDay += 22; } else { min_time.wYear -= 1; min_time.wMonth = 12; min_time.wDay += 22; } } diff = SYSTEMTIMEcmp(&cache_time, &min_time); return diff < 0; }
static void Precache_Source(source_data *s) { int i; char name[1024]; server_data *servers[MAX_SERVERS]; int serversn = 0; if (s->type == type_url) { char *filename; size_t filename_size = SB_URL_To_Filename_Length(s->address.url); filename = Q_malloc(filename_size); SB_URL_to_FileName(s->address.url, filename, filename_size); snprintf(name, sizeof (name), "sb/cache/%s", filename); Q_free(filename); } else if (s->type == type_master) { snprintf(name, sizeof (name), "sb/cache/%d_%d_%d_%d_[%d].txt", s->address.address.ip[0], s->address.address.ip[1], s->address.address.ip[2], s->address.address.ip[3], ntohs(s->address.address.port)); } else { return; } Update_Source_From_File(s, name, servers, &serversn); if (serversn > 0) { SYSTEMTIME tm; char tmp_path[MAX_OSPATH] = {0}; snprintf(&tmp_path[0], sizeof(tmp_path), "%s/ezquake/%s", com_basedir, name); if (GetFileLocalTime(tmp_path, &tm)) { Reset_Source(s); s->servers = (server_data **) Q_malloc(serversn * sizeof(server_data *)); for (i=0; i < serversn; i++) s->servers[i] = servers[i]; s->serversn = serversn; s->servers_allocated = serversn; if (s->checked) rebuild_servers_list = 1; memcpy(&s->last_update, &tm, sizeof(SYSTEMTIME)); } } }