#include "atlenc.h"
errno_t fileBase64Encode(const char *srcFile, const char *dstFile)
{
FILE *fr = NULL, *fw = NULL;
errno_t err = 0;
if(err == 0)
{
err= fopen_s(&fr, srcFile, "rb");
if(err != 0)
{
printf( "The file '%s' can't be open\n", srcFile );
}
}
if (err == 0)
{
err = fopen_s(&fw, dstFile, "wb");
if(err != 0)
{
printf( "The file '%s' can't be open\n", dstFile );
}
}
if(err == 0)
{
const int tLen = ATLSMTP_MAX_BASE64_LINE_LENGTH; // = 57
BYTE srcBuf[tLen + 1];
char dstBuf[tLen * 4 /3 + 5]; //+\r\n\r\n\0 //
size_t nTotal = 0;
while(!feof(fr))
{
int nLen = fread(srcBuf, 1, tLen, fr);
int i = Base64EncodeGetRequiredLength(nLen);
Base64Encode(srcBuf, nLen, dstBuf, &i);
nTotal += fwrite(dstBuf, 1, i, fw);
}
}
if(fr)
fclose(fr);
if(fw)
fclose(fw);
return err;
}
errno_t fileBase64Decode(const char *srcFile, const char *dstFile)
{
FILE *fr = NULL, *fw = NULL;
errno_t err = 0;
if(err == 0)
{
err= fopen_s(&fr, srcFile, "rb");
if(err != 0)
{
printf( "The file '%s' can't be open\n", srcFile );
}
}
if (err == 0)
{
err = fopen_s(&fw, dstFile, "wb");
if(err != 0)
{
printf( "The file '%s' can't be open\n", dstFile );
}
}
if(err == 0)
{
const int tLen = ATLSMTP_MAX_QP_LINE_LENGTH + 2; //76+2
char srcBuf[tLen+1];
BYTE dstBuf[tLen*3/4+1];
size_t nTotal = 0;
while(!feof(fr))
{
int nLen = fread(srcBuf, 1, tLen, fr);
int i = Base64DecodeGetRequiredLength(nLen);
Base64Decode(srcBuf, nLen, dstBuf, &i);
nTotal += fwrite(dstBuf, 1, i, fw);
}
}
if(fr)
fclose(fr);
if(fw)
fclose(fw);
return err;
}