diff --git a/lib/base64.c b/lib/base64.c index c857fbce327e36ed8d5347114b9229ba4e0a76a1..67204771a8bbd6f42dfbaa4873ffdb71bdf6bf72 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 d8770f32503130dd0d21b5d61dd7260cd5222c28..05ff71f0ca62c44d1d35331cbc61b2c207620dfe 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