void AddToFileSource(source_data *source, server_data *serv) { if (IsInSource(source, serv)) return; SB_ServerList_Lock(); // reallocate buffer if we've run out of space if (source->serversn >= source->servers_allocated) { int new_size = source->servers_allocated + 4; server_data** newlist = Q_malloc(new_size * sizeof(server_data*)); memcpy(newlist, source->servers, sizeof(server_data*) * source->servers_allocated); Q_free(source->servers); source->servers = newlist; source->servers_allocated = new_size; } source->servers[source->serversn++] = Clone_Server(serv); rebuild_servers_list = true; SB_ServerList_Unlock(); DumpSource(source); Mark_Source(sources[0]); }
static void AddUnbound(server_data *s) { if (sources[0]->serversn >= MAX_UNBOUND) return; if (IsInSource(sources[0], s)) return; sources[0]->servers[sources[0]->serversn] = s; (sources[0]->serversn) ++; rebuild_servers_list = true; }
void AddToFileSource(source_data *source, server_data *serv) { if (IsInSource(source, serv)) return; source->servers[source->serversn] = serv; (source->serversn) ++; rebuild_servers_list = true; DumpSource(source); Mark_Source(sources[0]); }
void RemoveFromFileSource(source_data *source, server_data *serv) { int i; if (source->serversn <= 0) return; for (i=0; i < source->serversn; i++) if (!memcmp(&source->servers[i]->address, &serv->address, 6)) { // Only add to unbound if not in any other sources... int j = 0; qbool in_other_source = false; for (j = 0; j < sourcesn; ++j) { if (source != sources[j]) { in_other_source |= IsInSource(sources[j], serv); } } // remove from source if (i != source->serversn - 1) { memmove(source->servers+i, source->servers+i+1, (source->serversn - i - 1) * sizeof(source_data *)); } --source->serversn; DumpSource(source); if (!in_other_source) { // add to unbound AddUnbound(serv); Mark_Source(sources[0]); } return; } }