summaryrefslogtreecommitdiff
path: root/src/libs6dns/s6dns_domain_encode.c
blob: 61a790dfabdd1b8b0d5939c1396b2ebe3652418e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* ISC license. */

#include <errno.h>
#include <skalibs/bytestr.h>
#include <s6-dns/s6dns-domain.h>

int s6dns_domain_encode (s6dns_domain_t *d)
{
  register char *s = d->s ;
  register unsigned int len = d->len ;
  if (!d->len || (*s != '.')) return (errno = EINVAL, 0) ;
  while (len > 1)
  {
    register unsigned int n = byte_chr(s + 1, len - 1, '.') ;
    if (n > 63) return (errno = EINVAL, 0) ;
    *s = n++ ; s += n ; len -= n ;
  }
  if (!len) return (errno = EINVAL, 0) ;
  *s = 0 ;
  return 1 ;
}