const char *query, const char *domain)
{
unsigned char *ptr = buf;
- char *offset;
int len;
DBG("query %s domain %s", query, domain);
- offset = (char *) query;
- while (offset != NULL) {
- char *tmp;
+ while (query != NULL) {
+ const char *tmp;
- tmp = strchr(offset, '.');
+ tmp = strchr(query, '.');
if (tmp == NULL) {
- len = strlen(offset);
+ len = strlen(query);
if (len == 0)
break;
*ptr = len;
- memcpy(ptr + 1, offset, len);
+ memcpy(ptr + 1, query, len);
ptr += len + 1;
break;
}
- *ptr = tmp - offset;
- memcpy(ptr + 1, offset, tmp - offset);
- ptr += tmp - offset + 1;
+ *ptr = tmp - query;
+ memcpy(ptr + 1, query, tmp - query);
+ ptr += tmp - query + 1;
- offset = tmp + 1;
+ query = tmp + 1;
}
- offset = (char *) domain;
- while (offset != NULL) {
- char *tmp;
+ while (domain != NULL) {
+ const char *tmp;
- tmp = strchr(offset, '.');
+ tmp = strchr(domain, '.');
if (tmp == NULL) {
- len = strlen(offset);
+ len = strlen(domain);
if (len == 0)
break;
*ptr = len;
- memcpy(ptr + 1, offset, len);
+ memcpy(ptr + 1, domain, len);
ptr += len + 1;
break;
}
- *ptr = tmp - offset;
- memcpy(ptr + 1, offset, tmp - offset);
- ptr += tmp - offset + 1;
+ *ptr = tmp - domain;
+ memcpy(ptr + 1, domain, tmp - domain);
+ ptr += tmp - domain + 1;
- offset = tmp + 1;
+ domain = tmp + 1;
}
*ptr++ = 0x00;
/* now the query, which is a name and 2 16 bit words */
l = dns_name_length(c) + 1;
c += l;
- len -= l;
w = (uint16_t *) c;
type = ntohs(*w);
sk = g_io_channel_unix_get_fd(server->channel);
err = send(sk, request, req->request_len, 0);
+ if (err < 0)
+ return -EIO;
req->numserv++;
*/
ptr = reply + offset + sizeof(struct domain_hdr);
host_len = *ptr;
- domain_len = strlen((const char *)ptr) - host_len - 1;
+ domain_len = strlen((const char *)ptr + host_len + 1);
/*
- * remove the domain name and replaced it by the end
+ * remove the domain name and replace it by the end
* of reply.
*/
- memmove(ptr + host_len + 1,
+ memcpy(ptr + host_len + 1,
ptr + host_len + domain_len + 1,
reply_len - (ptr - reply + domain_len));
if (hdr->qr != 0 || qdcount != 1)
return -EINVAL;
- memset(name, 0, size);
+ name[0] = '\0';
ptr = buf + sizeof(struct domain_hdr);
remain = len - sizeof(struct domain_hdr);