diff options
-rw-r--r-- | lib/base64.c | 34 | ||||
-rw-r--r-- | lib/base64.h | 2 |
2 files changed, 30 insertions, 6 deletions
diff --git a/lib/base64.c b/lib/base64.c index c857fbce3..67204771a 100644 --- a/lib/base64.c +++ b/lib/base64.c @@ -44,19 +44,40 @@ static char table64[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -void base64Encode(char *intext, char *output) +/* + * base64Encode() + * + * Returns the length of the newly created base64 string. The third argument + * is a pointer to an allocated area holding the base64 data. If something + * went wrong, -1 is returned. + * + * Modifed my version to resemble the krb4 one. The krb4 sources then won't + * need its own. + * + */ +int base64Encode(char *indata, int insize, char **outptr) { unsigned char ibuf[3]; unsigned char obuf[4]; int i; int inputparts; + char *output; + char *base64data; - while(*intext) { + if(0 == insize) + insize = strlen(indata); + + base64data = output = (char*)malloc(insize*4/3+4); + if(NULL == output) + return -1; + + while(insize > 0) { for (i = inputparts = 0; i < 3; i++) { - if(*intext) { + if(*indata) { inputparts++; - ibuf[i] = *intext; - intext++; + ibuf[i] = *indata; + indata++; + insize--; } else ibuf[i] = 0; @@ -90,5 +111,8 @@ void base64Encode(char *intext, char *output) output += 4; } *output=0; + *outptr = base64data; /* make it return the actual data memory */ + + return strlen(base64data); /* return the length of the new data */ } /* ---- End of Base64 Encoding ---- */ diff --git a/lib/base64.h b/lib/base64.h index d8770f325..05ff71f0c 100644 --- a/lib/base64.h +++ b/lib/base64.h @@ -40,5 +40,5 @@ * ------------------------------------------------------------ ****************************************************************************/ -void base64Encode(char *intext, char *output); +int base64Encode(char *indata, int insize, char **output); #endif |