/*====================================================================*
*
* size_t b64dump (void const * memory, size_t extent, size_t column, FILE *fp);
*
* base64.h
*
* base64 encode a memory region and write to a text file; wrap
* the output at a given column; do not wrap when column is 0;
*
* Motley Tools by Charles Maier <cmaier@cmassoc.net>;
* Copyright (c) 2001-2006 by Charles Maier Associates;
* Licensed under the Internet Software Consortium License;
*
*--------------------------------------------------------------------*/
#ifndef B64DUMP_SOURCE
#define B64DUMP_SOURCE
#include <stdio.h>
#include <stdint.h>
#include "../tools/base64.h"
#include "../tools/types.h"
void b64dump (void const * memory, size_t extent, size_t column, FILE *fp)
{
byte * offset = (byte *)(memory);
unsigned encode = 0;
while (extent)
{
uint32_t word = 0;
unsigned byte = 0;
unsigned bits = BASE64_WORDSIZE - BASE64_BYTESIZE;
while ((bits) && (extent))
{
bits -= BASE64_BYTESIZE;
word |= *offset << bits;
offset++;
extent--;
byte++;
}
if (byte++)
{
bits = BASE64_WORDSIZE - BASE64_BYTESIZE;
while ((bits) && (byte))
{
bits -= BASE64_CHARSIZE;
putc (BASE64_CHARSET [(word >> bits) & BASE64_CHARMASK], fp);
byte--;
encode++;
}
while (bits)
{
bits -= BASE64_CHARSIZE;
putc ('=', fp);
encode++;
}
if ((column) && !(encode%column))
{
putc ('\n', fp);
}
}
}
return;
}
#endif