static jdns_string_t *string_tolower(const jdns_string_t *in) { int n; jdns_string_t *out = jdns_string_copy(in); for(n = 0; n < out->size; ++n) out->data[n] = tolower(out->data[n]); return out; }
jdns_packet_label_t *jdns_packet_label_copy(const jdns_packet_label_t *a) { jdns_packet_label_t *c = jdns_packet_label_new(); c->offset = a->offset; if(a->value) c->value = jdns_string_copy(a->value); return c; }
void jdns_packet_resource_add_name(jdns_packet_resource_t *a, const jdns_string_t *name) { jdns_packet_write_t *write = jdns_packet_write_new(); write->type = JDNS_PACKET_WRITE_NAME; write->value = jdns_string_copy(name); jdns_list_insert_value(a->writelog, write, -1); jdns_packet_write_delete(write); }
jdns_packet_write_t *jdns_packet_write_copy(const jdns_packet_write_t *a) { jdns_packet_write_t *c = jdns_packet_write_new(); c->type = a->type; if(a->value) c->value = jdns_string_copy(a->value); return c; }
jdns_packet_question_t *jdns_packet_question_copy(const jdns_packet_question_t *a) { jdns_packet_question_t *c = jdns_packet_question_new(); if(a->qname) c->qname = jdns_string_copy(a->qname); c->qtype = a->qtype; c->qclass = a->qclass; return c; }
jdns_packet_resource_t *jdns_packet_resource_copy(const jdns_packet_resource_t *a) { jdns_packet_resource_t *c = jdns_packet_resource_new(); if(a->qname) c->qname = jdns_string_copy(a->qname); c->qtype = a->qtype; c->qclass = a->qclass; c->ttl = a->ttl; c->rdlength = a->rdlength; c->rdata = jdns_copy_array(a->rdata, a->rdlength); jdns_list_delete(c->writelog); c->writelog = jdns_list_copy(a->writelog); return c; }
static jdns_dnshostlist_t *read_hosts_file(const char *path) { jdns_dnshostlist_t *out; FILE *f; out = jdns_dnshostlist_new(); f = jdns_fopen(path, "r"); if(!f) return out; while(1) { jdns_string_t *line, *simp; jdns_stringlist_t *parts; jdns_address_t *addr; int n; line = file_nextline(f); if(!line) break; // truncate at comment n = string_indexOf(line, '#', 0); if(n != -1) { line->size = n; line->data[n] = 0; } simp = string_simplify(line); jdns_string_delete(line); parts = string_split(simp, ' '); jdns_string_delete(simp); if(parts->count < 2) { jdns_stringlist_delete(parts); continue; } addr = jdns_address_new(); if(!jdns_address_set_cstr(addr, (const char *)parts->item[0]->data)) { jdns_address_delete(addr); jdns_stringlist_delete(parts); continue; } for(n = 1; n < parts->count; ++n) { jdns_dnshost_t *h = jdns_dnshost_new(); h->name = jdns_string_copy(parts->item[n]); h->address = jdns_address_copy(addr); jdns_dnshostlist_append(out, h); jdns_dnshost_delete(h); } jdns_address_delete(addr); jdns_stringlist_delete(parts); } fclose(f); return out; }