Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SW_HTTPServer by
Diff: Base64.cpp
- Revision:
- 13:8975d7928678
- Parent:
- 12:109bf1558300
- Child:
- 14:19c5f6151319
--- a/Base64.cpp Sun Aug 11 15:49:51 2013 +0000
+++ b/Base64.cpp Mon Aug 12 11:26:59 2013 +0000
@@ -1,5 +1,9 @@
-
+#ifndef WIN32
#include "mbed.h"
+#else
+#include "windows.h"
+typedef unsigned int uint32_t;
+#endif
#include "Base64.h"
static const char encoding_table[] = {
@@ -27,14 +31,14 @@
}
-char * Base64::base64_encode(const unsigned char *data,size_t input_length,size_t *output_length)
+char * Base64::Encode(const char *data, size_t input_length, size_t *output_length)
{
*output_length = 4 * ((input_length + 2) / 3);
- char *encoded_data = (char *)malloc(*output_length);
+ char *encoded_data = (char *)malloc(*output_length+1); // often used for text, so add room for NULL
if (encoded_data == NULL) return NULL;
- for (int i = 0, j = 0; i < input_length;) {
+ for (unsigned int i = 0, j = 0; i < input_length;) {
uint32_t octet_a = i < input_length ? data[i++] : 0;
uint32_t octet_b = i < input_length ? data[i++] : 0;
@@ -51,11 +55,12 @@
for (int i = 0; i < mod_table[input_length % 3]; i++)
encoded_data[*output_length - 1 - i] = '=';
+ encoded_data[*output_length] = '\0'; // as a courtesy to text users
return encoded_data;
}
-unsigned char * Base64::base64_decode(const char *data,size_t input_length,size_t *output_length)
+char * Base64::Decode(const char *data, size_t input_length, size_t *output_length)
{
if (decoding_table == NULL)
build_decoding_table();
@@ -67,11 +72,11 @@
if (data[input_length - 1] == '=') (*output_length)--;
if (data[input_length - 2] == '=') (*output_length)--;
- unsigned char *decoded_data = (unsigned char *)malloc(*output_length);
+ char *decoded_data = (char *)malloc(*output_length+1); // often used for text, so add room for NULL
if (decoded_data == NULL)
return NULL;
- for (int i = 0, j = 0; i < input_length;) {
+ for (unsigned int i = 0, j = 0; i < input_length;) {
uint32_t sextet_a = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]];
uint32_t sextet_b = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]];
@@ -90,6 +95,7 @@
if (j < *output_length)
decoded_data[j++] = (triple >> 0 * 8) & 0xFF;
}
+ decoded_data[*output_length] = '\0'; // as a courtesy to text users
return decoded_data;
}
@@ -101,4 +107,3 @@
for (int i = 0; i < 64; i++)
decoding_table[(unsigned char) encoding_table[i]] = i;
}
-
