Merge pull request #2254 from esohns/fstat_size_64_bits
[ACE_TAO.git] / ACE / ACEXML / common / XML_Codecs.cpp
blob657154f31bc2cddf18b20cc57ba67b9b0a35a5e8
1 // -*- C++ -*-
3 #include "ace/OS_Memory.h"
4 #include "ace/OS_NS_string.h"
5 #include "ACEXML/common/XML_Codecs.h"
6 #include <memory>
8 ACEXML_Char*
9 ACEXML_Base64::encode (const ACEXML_Char* input,
10 size_t* output_len)
12 if (!input)
13 return 0;
14 size_t len = ACE_OS::strlen (input);
16 ACE_Byte* buf = 0;
17 ACE_NEW_RETURN (buf,
18 ACE_Byte[len],
19 0);
20 std::unique_ptr<ACE_Byte[]> cleanup_buf (buf);
22 for (size_t i = 0; i < len; ++i)
23 buf[i] = (ACE_Byte)input[i];
24 buf[len] = 0;
26 size_t encode_len = 0;
27 ACE_Byte* encodedBuf = ACE_Base64::encode (buf, len, &encode_len);
29 if (!encodedBuf)
30 return 0;
32 ACEXML_Char* result = 0;
33 ACE_NEW_RETURN (result,
34 ACEXML_Char[encode_len+1],
35 0);
37 for (size_t j = 0; j < encode_len; ++j)
38 result[j] = (ACEXML_Char)encodedBuf[j];
39 result[encode_len] = 0;
41 *output_len = encode_len;
42 delete[] encodedBuf;
43 return result;
47 ACEXML_Char*
48 ACEXML_Base64::decode (const ACEXML_Char* input,
49 size_t* output_len)
51 if (!input)
52 return 0;
54 size_t len = ACE_OS::strlen (input);
56 ACE_Byte* buf = 0;
58 ACE_NEW_RETURN (buf,
59 ACE_Byte[len],
60 0);
62 std::unique_ptr<ACE_Byte[]> cleanup (buf);
64 for (size_t i = 0; i < len; ++i)
65 buf[i] = (ACE_Byte)input[i];
67 buf[len] = 0;
69 size_t decode_len = 0;
71 ACE_Byte* decodedBuf = ACE_Base64::decode (buf, &decode_len);
73 if (!decodedBuf)
74 return 0;
76 ACEXML_Char* result = 0;
78 ACE_NEW_RETURN (result,
79 ACEXML_Char[decode_len+1],
80 0);
82 for (size_t j = 0; j < decode_len; ++j)
83 result[j] = (ACEXML_Char)decodedBuf[j];
85 result[decode_len] = 0;
87 *output_len = decode_len;
88 delete[] decodedBuf;
90 return result;