summaryrefslogtreecommitdiff
path: root/str.c
diff options
context:
space:
mode:
authorVadim Kochan <vadim4j@gmail.com>2017-06-01 13:12:27 +0300
committerTobias Klauser <tklauser@distanz.ch>2017-06-02 09:15:21 +0200
commita2524f2bc9c0e8651221ba88b6013db55cec0190 (patch)
tree80cca6f9742519e18bbad787042069b8e9ad8810 /str.c
parent906cb247a831e37665a19e2c6b41b7cfd4c6621b (diff)
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 <vadim4j@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'str.c')
-rw-r--r--str.c37
1 files changed, 37 insertions, 0 deletions
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;
+}