#include "utf8.h"
#include "util.h"
#include "strv.h"
+#include "unaligned.h"
#include "resolved-dns-domain.h"
#include "resolved-dns-packet.h"
if (r < 0)
return r;
- ((uint8_t*) d)[0] = (uint8_t) (v >> 8);
- ((uint8_t*) d)[1] = (uint8_t) v;
+ unaligned_write_be16(d, v);
return 0;
}
if (r < 0)
return r;
- ((uint8_t*) d)[0] = (uint8_t) (v >> 24);
- ((uint8_t*) d)[1] = (uint8_t) (v >> 16);
- ((uint8_t*) d)[2] = (uint8_t) (v >> 8);
- ((uint8_t*) d)[3] = (uint8_t) v;
+ unaligned_write_be32(d, v);
return 0;
}
goto fail;
if (allow_compression) {
- r = hashmap_ensure_allocated(&p->names,
- dns_name_hash_func,
- dns_name_compare_func);
+ r = hashmap_ensure_allocated(&p->names, &dns_name_hash_ops);
if (r < 0)
goto fail;
if (r < 0)
return r;
- *ret = (((uint16_t) ((uint8_t*) d)[0]) << 8) |
- ((uint16_t) ((uint8_t*) d)[1]);
+ *ret = unaligned_read_be16(d);
+
return 0;
}
if (r < 0)
return r;
- *ret = (((uint32_t) ((uint8_t*) d)[0]) << 24) |
- (((uint32_t) ((uint8_t*) d)[1]) << 16) |
- (((uint32_t) ((uint8_t*) d)[2]) << 8) |
- ((uint32_t) ((uint8_t*) d)[3]);
+ *ret = unaligned_read_be32(d);
return 0;
}
}
static int dnskey_parse_flags(DnsResourceRecord *rr, uint16_t flags) {
+ assert(rr);
+
if (flags & ~(DNSKEY_FLAG_SEP | DNSKEY_FLAG_ZONE_KEY))
return -EBADMSG;
unsigned n, i;
int r;
+ if (p->extracted)
+ return 0;
+
saved_rindex = p->rindex;
dns_packet_rewind(p, DNS_PACKET_HEADER_SIZE);
p->answer = answer;
answer = NULL;
+ p->extracted = true;
+
r = 0;
finish: