summaryrefslogtreecommitdiffstats
path: root/src/core/base64.c
diff options
context:
space:
mode:
authorMichael Brown2010-05-28 02:17:22 +0200
committerMichael Brown2010-05-28 13:44:23 +0200
commitdfcce165a58dc3be7d1c6c1bdf80dd6a28d50d7f (patch)
tree202eb2047d2c7da2f8e7a0ea71daa6f35c03a4c5 /src/core/base64.c
parent[doc] Re-add README file (diff)
downloadipxe-dfcce165a58dc3be7d1c6c1bdf80dd6a28d50d7f.tar.gz
ipxe-dfcce165a58dc3be7d1c6c1bdf80dd6a28d50d7f.tar.xz
ipxe-dfcce165a58dc3be7d1c6c1bdf80dd6a28d50d7f.zip
[base64] Allow base64_encode() to handle arbitrary data
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/base64.c')
-rw-r--r--src/core/base64.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/core/base64.c b/src/core/base64.c
index 01bf46e2..05ff424f 100644
--- a/src/core/base64.c
+++ b/src/core/base64.c
@@ -33,23 +33,24 @@ static const char base64[64] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/**
- * Base64-encode a string
+ * Base64-encode data
*
- * @v raw Raw string
+ * @v raw Raw data
+ * @v len Length of raw data
* @v encoded Buffer for encoded string
*
* The buffer must be the correct length for the encoded string. Use
* something like
*
- * char buf[ base64_encoded_len ( strlen ( raw ) ) + 1 ];
+ * char buf[ base64_encoded_len ( len ) + 1 ];
*
* (the +1 is for the terminating NUL) to provide a buffer of the
* correct size.
*/
-void base64_encode ( const char *raw, char *encoded ) {
+void base64_encode ( const uint8_t *raw, size_t len, char *encoded ) {
const uint8_t *raw_bytes = ( ( const uint8_t * ) raw );
uint8_t *encoded_bytes = ( ( uint8_t * ) encoded );
- size_t raw_bit_len = ( 8 * strlen ( raw ) );
+ size_t raw_bit_len = ( 8 * len );
unsigned int bit;
unsigned int tmp;
@@ -63,6 +64,7 @@ void base64_encode ( const char *raw, char *encoded ) {
*(encoded_bytes++) = '=';
*(encoded_bytes++) = '\0';
- DBG ( "Base64-encoded \"%s\" as \"%s\"\n", raw, encoded );
- assert ( strlen ( encoded ) == base64_encoded_len ( strlen ( raw ) ) );
+ DBG ( "Base64-encoded to \"%s\":\n", encoded );
+ DBG_HDA ( 0, raw, len );
+ assert ( strlen ( encoded ) == base64_encoded_len ( len ) );
}