[dovecot-cvs] dovecot/src/lib base64.c,1.3,1.4 base64.h,1.4,1.5
cras at procontrol.fi
cras at procontrol.fi
Sun Nov 3 07:34:48 EET 2002
Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv8641/lib
Modified Files:
base64.c base64.h
Log Message:
Changed base64_decode() to separate src/dest buffers.
Index: base64.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/base64.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- base64.c 8 Sep 2002 14:39:05 -0000 1.3
+++ base64.c 3 Nov 2002 05:34:46 -0000 1.4
@@ -100,46 +100,46 @@
};
#define CHAR64(c) (index_64[(int)(unsigned char)(c)])
-ssize_t base64_decode(char *data)
+ssize_t base64_decode(const char *src, unsigned char *dest)
{
- char *p, *start;
+ unsigned char *p;
int c1, c2, c3, c4;
- p = start = data;
- while (*data != '\0') {
- c1 = *data++;
+ p = dest;
+ while (*src != '\0') {
+ c1 = *src++;
if (CHAR64(c1) == XX)
return -1;
- c2 = *data++;
+ c2 = *src++;
if (CHAR64(c2) == XX)
return -1;
- c3 = *data++;
+ c3 = *src++;
if (c3 != '=' && CHAR64(c3) == XX)
return -1;
- c4 = *data++;
+ c4 = *src++;
if (c4 != '=' && CHAR64(c4) == XX)
return -1;
*p++ = ((CHAR64(c1) << 2) | ((CHAR64(c2) & 0x30) >> 4));
if (c3 == '=') {
- if (*data != '\0' || c4 != '=')
+ if (*src != '\0' || c4 != '=')
return -1;
break;
}
*p++ = (((CHAR64(c2) & 0xf) << 4) | ((CHAR64(c3) & 0x3c) >> 2));
if (c4 == '=') {
- if (*data != '\0')
+ if (*src != '\0')
return -1;
break;
}
*p++ = (((CHAR64(c3) & 0x3) << 6) | CHAR64(c4));
}
- return (ssize_t) (p-start);
+ return (ssize_t) (p-dest);
}
Index: base64.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/base64.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- base64.h 9 Oct 2002 17:49:41 -0000 1.4
+++ base64.h 3 Nov 2002 05:34:46 -0000 1.5
@@ -4,8 +4,8 @@
/* Translates binary data into base64. Allocates memory from data stack. */
const char *base64_encode(const unsigned char *data, size_t size);
-/* Translates base64 data into binary modifying the data itself.
- Returns size of the binary data, or -1 if error occured. */
-ssize_t base64_decode(char *data);
+/* Translates base64 data into binary. dest must be large enough, and may be
+ same as src. Returns size of the binary data, or -1 if error occured. */
+ssize_t base64_decode(const char *src, unsigned char *dest);
#endif
More information about the dovecot-cvs
mailing list