diff --git a/src/encode/base64.c b/src/encode/base64.c
index 9aa1eb8bd4ccbcee688151c4156a40a06d0e56ea..0374d5a470c5f4984e0c676e2dcb7bff4d428247 100644
--- a/src/encode/base64.c
+++ b/src/encode/base64.c
@@ -42,23 +42,23 @@
 static const char * base64alphabet = 
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
-char * b64_decode(char *target, const char *source, size_t tlen, size_t slen)
+int b64_decode(char *target, size_t tlen, const char *source size_t slen)
 {
-	const char	*read;
-	char	*write;
-	char	*tend;
-	const char	*send;
+	const char	*inp;
+	char	*outp;
+	char	*outend;
+	const char	*inend;
 	int		bits=0;
 	int		working=0;
 	char *	i;
 
-	write=target;
-	read=source;
-	tend=target+tlen;
-	send=source+slen;
-	for(;write<tend && read<send;read++) {
+	outp=target;
+	inp=source;
+	outend=target+tlen;
+	inend=source+slen;
+	for(;outp<outend && inp<inend;inp++) {
 		working<<=6;
-		i=strchr(base64alphabet,(char)*read);
+		i=strchr(base64alphabet,(char)*inp);
 		if(i==NULL) {
 			break;
 		}
@@ -66,18 +66,18 @@ char * b64_decode(char *target, const char *source, size_t tlen, size_t slen)
 		working |= (i-base64alphabet);
 		bits+=6;
 		if(bits>8) {
-			*(write++)=(char)((working&(0xFF<<(bits-8)))>>(bits-8));
+			*(outp++)=(char)((working&(0xFF<<(bits-8)))>>(bits-8));
 			bits-=8;
 		}
 	}
 	if(bits)
-		*(write++)=(char)((working&(0xFF<<(bits-8)))>>(bits-8));
-	if(write == tend)  {
-		*(--write)=0;
-		return(NULL);
+		*(outp++)=(char)((working&(0xFF<<(bits-8)))>>(bits-8));
+	if(outp == outend)  {
+		*(--outp)=0;
+		return(-1);
 	}
-	*write=0;
-	return(target);
+	*outp=0;
+	return(outp-target);
 }
 
 static int add_char(char *pos, char ch, int done, char *end)
@@ -92,68 +92,68 @@ static int add_char(char *pos, char ch, int done, char *end)
 	return(0);
 }
 
-char * b64_encode(char *target, const char *source, size_t tlen, size_t slen)  {
-	const char	*read;
-	char	*write;
-	char	*tend;
-	const char	*send;
+int b64_encode(char *target, size_t tlen, const char *source, size_t slen)  {
+	const char	*inp;
+	char	*outp;
+	char	*outend;
+	const char	*inend;
 	char	*tmpbuf=NULL;
 	int		done=0;
 	char	enc;
 	int		buf=0;
 	
-	read=source;
+	inp=source;
 	if(source==target)  {
 		tmpbuf=(char *)malloc(tlen);
 		if(tmpbuf==NULL)
-			return(NULL);
-		write=tmpbuf;
+			return(-1);
+		outp=tmpbuf;
 	}
 	else
-		write=target;
+		outp=target;
 
-	tend=write+tlen;
-	send=read+slen;
-	for(;(read < send) && !done;)  {
-		enc=*(read++);
+	outend=outp+tlen;
+	inend=inp+slen;
+	for(;(inp < inend) && !done;)  {
+		enc=*(inp++);
 		buf=(enc & 0x03)<<4;
 		enc=(enc&0xFC)>>2;
-		if(add_char(write++, enc, done, tend))  {
+		if(add_char(outp++, enc, done, outend))  {
 			if(target==source)
 				free(tmpbuf);
-			return(NULL);
+			return(-1);
 		}
-		enc=buf|((*read & 0xF0) >> 4);
-		if(add_char(write++, enc, done, tend))  {
+		enc=buf|((*inp & 0xF0) >> 4);
+		if(add_char(outp++, enc, done, outend))  {
 			if(target==source)
 				free(tmpbuf);
-			return(NULL);
+			return(-1);
 		}
-		if(read==send)
+		if(inp==inend)
 			done=1;
-		buf=(*(read++)<<2)&0x3C;
-		enc=buf|((*read & 0xC0)>>6);
-		if(add_char(write++, enc, done, tend))  {
+		buf=(*(inp++)<<2)&0x3C;
+		enc=buf|((*inp & 0xC0)>>6);
+		if(add_char(outp++, enc, done, outend))  {
 			if(target==source)
 				free(tmpbuf);
-			return(NULL);
+			return(-1);
 		}
-		if(read==send)
+		if(inp==inend)
 			done=1;
-		enc=((int)*(read++))&0x3F;
-		if(add_char(write++, enc, done, tend))  {
+		enc=((int)*(inp++))&0x3F;
+		if(add_char(outp++, enc, done, outend))  {
 			if(target==source)
 				free(tmpbuf);
-			return(NULL);
+			return(-1);
 		}
-		if(read==send)
+		if(inp==inend)
 			done=1;
 	}
-	if(write<tend)
-		*write=0;
+	if(outp<outend)
+		*outp=0;
 	if(target==source)  {
 		memcpy(target,tmpbuf,tlen);
 		free(tmpbuf);
 	}
-	return(target);
+	return(outp-target);
 }
diff --git a/src/encode/base64.h b/src/encode/base64.h
index a6f001debe676a048353a2d69ec4b56c4f65d29b..fdd1f0d02255591e5527c0c2cc1a7460dba83657 100644
--- a/src/encode/base64.h
+++ b/src/encode/base64.h
@@ -35,5 +35,5 @@
  * Note: If this box doesn't appear square, then you need to fix your tabs.	*
  ****************************************************************************/
 
-char * b64_encode(char *target, const char *source, size_t tlen, size_t slen);
-char * b64_decode(char *target, const char *source, size_t tlen, size_t slen);
+int b64_encode(char *target, size_t tlen, const char *source, size_t slen);
+int b64_decode(char *target, size_t tlen, const char *source, size_t slen);
diff --git a/src/sbbs3/mime.c b/src/sbbs3/mime.c
index d32223577997a19f3de0e8a56b222ffb611b3696..7ce01846836ce56c61f184ff6578e3e5b9d561fb 100644
--- a/src/sbbs3/mime.c
+++ b/src/sbbs3/mime.c
@@ -109,7 +109,7 @@ BOOL base64out(SOCKET socket, char * pathfile)
         return(FALSE);
     while(1) {
         bytesread=fread(in,1,57,fp);
-		if((b64_encode(out,in,sizeof(out),bytesread)==NULL)
+		if((b64_encode(out,sizeof(out),in,bytesread)==-1)
 				|| !sockprintf(socket,out))  {
 			fclose(fp);
 			return(FALSE);
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index fdff6c27074b0eb6b57ffb7f9477227cec2177c7..ef8dfb2c3432b4abe0eec1bc90a3b51ab01ba223 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -1164,7 +1164,7 @@ static BOOL parse_headers(http_session_t * session)
 					if(p==NULL)
 						break;
 					while(*p && *p<' ') p++;
-					b64_decode(p,p,strlen(p),strlen(p));
+					b64_decode(p,strlen(p),p,strlen(p));
 					SAFECOPY(session->req.auth,p);
 					break;
 				case HEAD_LENGTH: