1 // RUN: %clangxx %s -o %t -lresolv && %run %t %p
2 
3 // -lresolv fails on Android.
4 // UNSUPPORTED: android
5 
6 #include <assert.h>
7 #include <resolv.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <sys/types.h>
11 
12 int main(int iArgc, char *szArgv[]) {
13   // Check NTOP writing
14   const char *src = "base64 test data";
15   size_t src_len = strlen(src);
16   size_t dst_len = ((src_len + 2) / 3) * 4 + 1;
17   char dst[dst_len];
18   int res = b64_ntop(reinterpret_cast<const unsigned char *>(src), src_len, dst,
19                      dst_len);
20   assert(res >= 0);
21   assert(strcmp(dst, "YmFzZTY0IHRlc3QgZGF0YQ==") == 0);
22 
23   // Check PTON writing
24   unsigned char target[dst_len];
25   res = b64_pton(dst, target, dst_len);
26   assert(res >= 0);
27   assert(strncmp(reinterpret_cast<const char *>(target), src, res) == 0);
28 
29   // Check NTOP writing for zero length src
30   src = "";
31   src_len = strlen(src);
32   assert(((src_len + 2) / 3) * 4 + 1 < dst_len);
33   res = b64_ntop(reinterpret_cast<const unsigned char *>(src), src_len, dst,
34                  dst_len);
35   assert(res >= 0);
36   assert(strcmp(dst, "") == 0);
37 
38   // Check PTON writing for zero length src
39   dst[0] = '\0';
40   res = b64_pton(dst, target, dst_len);
41   assert(res >= 0);
42   assert(strncmp(reinterpret_cast<const char *>(target), src, res) == 0);
43 
44   return 0;
45 }
46