aboutsummaryrefslogtreecommitdiff
path: root/lib/base64.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2000-09-21 08:46:44 +0000
committerDaniel Stenberg <daniel@haxx.se>2000-09-21 08:46:44 +0000
commit37249c3a4161c9cfa88b4f2fd86f12d3ee61fdb2 (patch)
treebfcda37a3538d86eefbab1c5d89a2cd4891dea74 /lib/base64.c
parentdef69c30879c0246bccb02d79e06b937e39d0ba4 (diff)
new interface to the base64 encoder
Diffstat (limited to 'lib/base64.c')
-rw-r--r--lib/base64.c34
1 files changed, 29 insertions, 5 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 ---- */