1 void *
mempcpy(
void *dest,
const void *src,
size_t n);
162 unsigned qdcount :16;
163 unsigned ancount :16;
164 unsigned nscount :16;
165 unsigned arcount :16;
169 #define DNS_HFIXEDSZ 12
170 #define DNS_QFIXEDSZ 4
187 #define NS_MAXCDNAME 255
189 #define NS_CMPRSFLGS 0xc0
191 static const char digits[] =
"0123456789";
209 return (ch > 0x20 && ch < 0x7f);
212 int ns_name_unpack(
const u_char *
msg,
const u_char *eom,
const u_char *src, u_char *dst,
size_t dstsiz)
214 const u_char *srcp, *dstlim;
222 dstlim = dst + dstsiz;
223 if (srcp < msg || srcp >= eom) {
228 while ((n = *srcp++) != 0) {
233 if (dstp + 1 >= dstlim) {
247 if (dstp + n + 1 >= dstlim || srcp + n >= eom) {
252 dstp =
mempcpy(dstp, srcp - 1, n + 1);
262 len = srcp - src + 1;
263 srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff));
264 if (srcp < msg || srcp >= eom) {
274 if (checked >= eom - msg) {
301 while ((n = *cp++) != 0) {
317 if (dn + n * 2 + 4 >= eom) {
328 *dn++ = u > 9 ?
'a' + u - 10 :
'0' +
u;
330 *dn++ = u > 9 ?
'a' + u - 10 :
'0' +
u;
341 for ((
void)
NULL; n > 0; n--) {
357 *dn++ =
digits[(c % 100) / 10];
394 int dn_expand(
const char *
msg,
const char *eom,
const char *src,
char *dst,
int dstsiz) {
395 int n =
ns_name_uncompress((u_char *) msg, (u_char *) eom, (u_char *) src, dst, (
size_t)dstsiz);
397 if (n > 0 && dst[0] ==
'.')