summaryrefslogtreecommitdiff
path: root/ares_expand_string.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-03-30 09:06:42 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-03-30 09:06:42 +0000
commitaf26fa53f3d73fb70d4e9be973626aab6597b40a (patch)
treed14125c5d42ff8845a8ccae8c8056750e0d86202 /ares_expand_string.c
parent155aadf0b3c9d4db338bf4aeca96af9b446ffbcf (diff)
downloadc-ares-af26fa53f3d73fb70d4e9be973626aab6597b40a.tar.gz
c-ares-af26fa53f3d73fb70d4e9be973626aab6597b40a.tar.bz2
c-ares-af26fa53f3d73fb70d4e9be973626aab6597b40a.zip
Dominick Meglio's new ares_expand_string() function
Diffstat (limited to 'ares_expand_string.c')
-rw-r--r--ares_expand_string.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/ares_expand_string.c b/ares_expand_string.c
new file mode 100644
index 0000000..135a8d9
--- /dev/null
+++ b/ares_expand_string.c
@@ -0,0 +1,65 @@
+/* Copyright 1998 by the Massachusetts Institute of Technology.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in
+ * advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ */
+
+#include <sys/types.h>
+
+#ifdef WIN32
+#include "nameser.h"
+#else
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include "ares.h"
+#include "ares_private.h" /* for the memdebug */
+
+/* Simply decodes a length-encoded character string. The first byte of the
+ * input is the length of the string to be returned and the bytes thereafter
+ * are the characters of the string. The returned result will be NULL
+ * terminated.
+ */
+int ares_expand_string(const unsigned char *encoded,
+ const unsigned char *abuf,
+ int alen,
+ unsigned char **s,
+ long *enclen)
+{
+ unsigned char *q;
+ long len;
+ if (encoded == abuf+alen)
+ return ARES_EBADSTR;
+
+ len = *encoded;
+ if (encoded+len+1 > abuf+alen)
+ return ARES_EBADSTR;
+
+ encoded++;
+
+ *s = malloc(len+1);
+ if (*s == NULL)
+ return ARES_ENOMEM;
+ q = *s;
+ strncpy((char *)q, (char *)encoded, len);
+ q[len] = '\0';
+
+ *s = q;
+
+ *enclen = len+1;
+
+ return ARES_SUCCESS;
+}
+