From 6dfd3e629a7a60c6d61eaece15bd98aac595ee0d Mon Sep 17 00:00:00 2001 From: Joe DF Date: Fri, 12 Jun 2015 00:34:32 -0400 Subject: b64_encodef() was returning wrong size b64_decodef() not yet working. --- base64.c | 36 ++++++++++++++++++++++++++++++++++-- base64.h | 2 +- test.c | 48 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/base64.c b/base64.c index f159089..73546d1 100644 --- a/base64.c +++ b/base64.c @@ -144,6 +144,7 @@ unsigned int b64_encodef(char *InFile, char *OutFile) { else fputc('=',pOutFile); fputc('=',pOutFile); + i+=4; } fclose(pInFile); @@ -151,8 +152,39 @@ unsigned int b64_encodef(char *InFile, char *OutFile) { return i; } -/* + unsigned int b64_decodef(char *InFile, char *OutFile) { + + FILE *pInFile = fopen(InFile,"rb"); + FILE *pOutFile = fopen(OutFile,"wb"); + if ( (pInFile==NULL) || (pOutFile==NULL) ) + return 0; + + unsigned int c=0, j=0, k=0, s[4]; + while(c!=EOF) { + c=fgetc(pInFile); + if (c==EOF) + break; + s[j++]=b64_int(c); + if (j==4) { + fputc((s[0]<<2)+((s[1]&0x30)>>4),pOutFile); + if (s[2]!=64) { + fputc(((s[1]&0x0F)<<4)+((s[2]&0x3C)>>2),pOutFile); + if ((s[3]!=64)) { + fputc(((s[2]&0x03)<<6)+(s[3]),pOutFile); k+=3; + } else { + k+=2; + } + } else { + k+=1; + } + j=0; + } + } + + fclose(pInFile); + fclose(pOutFile); + + return k; } -*/ \ No newline at end of file diff --git a/base64.h b/base64.h index 7cec63d..d7a1072 100644 --- a/base64.h +++ b/base64.h @@ -2,7 +2,7 @@ base64.c - by Joe DF (joedf@ahkscript.org) Released under the MIT License - Revision: 18:30 2014-09-22 + Revision: 2015-06-12 00:02:32 Thank you for inspiration: http://www.codeproject.com/Tips/813146/Fast-base-functions-for-encode-decode diff --git a/test.c b/test.c index 5c0888e..757beaa 100644 --- a/test.c +++ b/test.c @@ -43,6 +43,8 @@ int main() { test_b64_decode(); puts("\nTesting test_b64_encodef() ...\n"); printf("%s\n",STATUS(test_b64_encodef())); + puts("\nTesting test_b64_decodef() ...\n"); + printf("%s\n",STATUS(test_b64_decodef())); puts("\n[END]"); return 0; @@ -135,7 +137,7 @@ int test_b64_encodef() { return 0; int i, j=0; - unsigned int test_a[] = HEXNUM_A; + unsigned int test_a[] = HEXNUM_B; unsigned int size_a = NELEMS(test_a); for (i=0;i