aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/base64.c34
-rw-r--r--lib/base64.h2
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