From a2524f2bc9c0e8651221ba88b6013db55cec0190 Mon Sep 17 00:00:00 2001 From: Vadim Kochan Date: Thu, 1 Jun 2017 13:12:27 +0300 Subject: str: Add function for converting string into DNS name Add str2fqdn for converting hostname string into DNS name notation: www.xxxx.yy.com -> 3www4xxxx2yy3com0 Returned string must be freed after use by the caller. Signed-off-by: Vadim Kochan Signed-off-by: Tobias Klauser --- str.c | 37 +++++++++++++++++++++++++++++++++++++ str.h | 1 + 2 files changed, 38 insertions(+) diff --git a/str.c b/str.c index 532058a..1d3e7ac 100644 --- a/str.c +++ b/str.c @@ -160,3 +160,40 @@ int str2mac(const char *str, uint8_t *mac, size_t len) return 0; } + +char *str2fqdn(const char *str) +{ + size_t slen = strlen(str); + size_t flen = 0; + char *fqdn; + char *tmp; + char *dup; + int i = 0; + int c = 0; + + dup = xstrdup(str); + tmp = dup; + + fqdn = xzmalloc(slen + 2); + + while (tmp <= dup + slen && c++ <= slen) { + if (tmp[i] == '.' || tmp[i] == '\0') { + size_t dlen; + + tmp[i] = '\0'; + dlen = strlen(tmp); + fqdn[flen] = dlen; + memcpy(&fqdn[flen + 1], tmp, dlen); + flen += dlen + 1; + tmp += dlen + 1; + i = 0; + + continue; + } + + i++; + } + + xfree(dup); + return fqdn; +} diff --git a/str.h b/str.h index 7879af6..a362c53 100644 --- a/str.h +++ b/str.h @@ -14,5 +14,6 @@ extern char *argv2str(int startind, int argc, char **argv); extern char **argv_insert(char **argv, size_t *count, const char *str); extern void argv_free(char **argv); extern int str2mac(const char *str, uint8_t *mac, size_t len); +extern char *str2fqdn(const char *str); #endif /* STR_H */ -- cgit v1.2.3-54-g00ecf