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]); }
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)) { // add to unbound AddUnbound(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); Mark_Source(sources[0]); return; } }
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]); }
int SB_Source_Add(const char* name, const char* address, sb_source_type_t type) { source_data *s; char addr[512]; int pos; if (strlen(name) <= 0 || strlen(address) <= 0) return -1; // create new source s = Create_Source(); s->type = type; strlcpy (s->name, name, sizeof (s->name)); strlcpy (addr, address, sizeof (addr)); if (s->type == type_file) { strlcpy (s->address.filename, address, sizeof (s->address.filename)); } else if (s->type == type_url) { strlcpy(s->address.url, address, sizeof(s->address.url)); } else { if (!strchr(addr, ':')) { strlcat (addr, ":27000", sizeof (addr)); } if (!NET_StringToAdr(addr, &(s->address.address))) { return -1; } } pos = sourcesn++; sources[pos] = s; Mark_Source(sources[pos]); Update_Source(sources[pos]); SB_Sources_Dump(); return pos; }
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; } }