diff options
author | Dmitry Bogatov <KAction@debian.org> | 2018-11-29 05:18:28 +0000 |
---|---|---|
committer | Dmitry Bogatov <KAction@debian.org> | 2018-11-29 05:18:28 +0000 |
commit | b19ff825af9758fa905bf0ba29bbff66fa66cd50 (patch) | |
tree | 4a6fc0b53bb646a038a422b7ef90d65968fde149 /dns_dtda.c | |
parent | 35c0ccd3b0eedd2d14e26a109f5812a5c30c38aa (diff) |
Import Upstream version 0.88
Diffstat (limited to 'dns_dtda.c')
-rw-r--r-- | dns_dtda.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/dns_dtda.c b/dns_dtda.c new file mode 100644 index 0000000..00b41a1 --- /dev/null +++ b/dns_dtda.c @@ -0,0 +1,35 @@ +#include "stralloc.h" +#include "dns.h" + +int dns_domain_todot_cat(stralloc *out,char *d) +{ + char ch; + char ch2; + unsigned char ch3; + char buf[4]; + + if (!*d) + return stralloc_append(out,"."); + + for (;;) { + ch = *d++; + while (ch--) { + ch2 = *d++; + if ((ch2 >= 'A') && (ch2 <= 'Z')) + ch2 += 32; + if (((ch2 >= 'a') && (ch2 <= 'z')) || ((ch2 >= '0') && (ch2 <= '9')) || (ch2 == '-') || (ch2 == '_')) { + if (!stralloc_append(out,&ch2)) return 0; + } + else { + ch3 = ch2; + buf[3] = '0' + (ch3 & 7); ch3 >>= 3; + buf[2] = '0' + (ch3 & 7); ch3 >>= 3; + buf[1] = '0' + (ch3 & 7); + buf[0] = '\\'; + if (!stralloc_catb(out,buf,4)) return 0; + } + } + if (!*d) return 1; + if (!stralloc_append(out,".")) return 0; + } +} |