-size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks)
-{
- int breaklength = 68; // must be a multiple of 4
- int readlength = 3 * breaklength / 4;
-
- int destoffset;
- int sourceoffset;
- int sourceremaining;
-
- base64_encodestate _state;
-
- base64_init_encodestate(&_state);
-
- if (linebreaks) {
- sourceremaining = sourcelen;
- destoffset = 0;
- sourceoffset = 0;
-
- while (sourceremaining > 0) {
- destoffset += base64_encode_block(
- &(source[sourceoffset]),
- (readlength > sourceremaining ? sourceremaining : readlength),
- &(dest[destoffset]),
- &_state);
- sourceoffset += readlength;
- sourceremaining -= readlength;
- dest[destoffset++] = '\r';
- dest[destoffset++] = '\n';
- }
-
- destoffset += base64_encode_blockend(&(dest[destoffset]), &_state, 0);
- }
- else {
- destoffset = base64_encode_block(source, sourcelen, dest, &_state);
-
- destoffset += base64_encode_blockend(&(dest[destoffset]), &_state, 0);
- }
- dest[destoffset] = 0;
- return destoffset;
-}
-
-
-/*
- * Convert base64-encoded to binary. Returns the length of the decoded data.
- * It will stop after reading 'length' bytes.
- */
-int CtdlDecodeBase64(char *dest, const char *source, size_t length)
-{
- base64_decodestate _state;
- int len;
-
- base64_init_decodestate(&_state);
-
- len = base64_decode_block(source, length, dest, &_state);
- dest[len] = '\0';
- return len;
-}
-
-
-/*
- * if we send out non ascii subjects, we encode it this way.
- */
-char *rfc2047encode(const char *line, long length)
-{