ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/utils/adbd/src/adb/b64_pton.c b/package/utils/adbd/src/adb/b64_pton.c
new file mode 100644
index 0000000..4ce2f4d
--- /dev/null
+++ b/package/utils/adbd/src/adb/b64_pton.c
@@ -0,0 +1,56 @@
+
+#include <ctype.h>
+
+int b64_pton(const char *src, unsigned char *dst, int dstsiz)
+{
+    int i, j, k;
+    unsigned int val3 = 0;
+    const char b64_tbl[] =
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\xff\xff\xff\x3f"
+        "\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\xff\xff\xff\x00\xff\xff"
+        "\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"
+        "\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff\xff"
+        "\xff\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28"
+        "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
+
+    for (i = j = k = 0; src[i] != '\0'; i++) {
+        if (isspace(src[i]))
+            continue;
+        if (b64_tbl[(unsigned char)src[i]] == (char)0xff)
+            return(-1);
+        val3 |= b64_tbl[(unsigned char)src[i]];
+        if (src[i] != '=') {
+            if (dst != 0 && k >= dstsiz)
+                return (-1);
+            if (j % 4 == 1) {
+                if (dst != 0)
+                    dst[k] = val3 >> 4;
+                k++;
+            } else if (j % 4 == 2) {
+                if (dst != 0)
+                    dst[k] = val3 >> 2;
+                k++;
+            } else if (j % 4 == 3) {
+                if (dst != 0)
+                    dst[k] = val3;
+                k++;
+            }
+        }
+        val3 <<= 6;
+        j++;
+    }
+    if (j % 4 != 0)
+        return (-1);
+
+    return (k);
+}