aboutsummaryrefslogtreecommitdiffstats
path: root/protocols
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2006-06-23 20:15:28 +0200
committerWilmer van der Gaast <wilmer@gaast.net>2006-06-23 20:15:28 +0200
commit812a41362a9316da1734fdaa8b1aad36bde9cb5c (patch)
treeac6aac55781de07e9e7e99ddfb2b8b74ab1debb2 /protocols
parent00ab35016e3646aa936ae0c3d7a8531ec68d6f24 (diff)
Added saner base64 encoding function (actually, moved the one from libyahoo2.c
to core, with some changes), which I need for the XML format password garbling.
Diffstat (limited to 'protocols')
-rw-r--r--protocols/yahoo/libyahoo2.c28
1 files changed, 2 insertions, 26 deletions
diff --git a/protocols/yahoo/libyahoo2.c b/protocols/yahoo/libyahoo2.c
index c691f18b..ee0f2f0e 100644
--- a/protocols/yahoo/libyahoo2.c
+++ b/protocols/yahoo/libyahoo2.c
@@ -694,34 +694,10 @@ static void yahoo_packet_dump(unsigned char *data, int len)
}
}
-static char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789._";
-static void to_y64(unsigned char *out, const unsigned char *in, int inlen)
/* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */
+static void to_y64(unsigned char *out, const unsigned char *in, int inlen)
{
- for (; inlen >= 3; inlen -= 3)
- {
- *out++ = base64digits[in[0] >> 2];
- *out++ = base64digits[((in[0]<<4) & 0x30) | (in[1]>>4)];
- *out++ = base64digits[((in[1]<<2) & 0x3c) | (in[2]>>6)];
- *out++ = base64digits[in[2] & 0x3f];
- in += 3;
- }
- if (inlen > 0)
- {
- unsigned char fragment;
-
- *out++ = base64digits[in[0] >> 2];
- fragment = (in[0] << 4) & 0x30;
- if (inlen > 1)
- fragment |= in[1] >> 4;
- *out++ = base64digits[fragment];
- *out++ = (inlen < 2) ? '-'
- : base64digits[(in[1] << 2) & 0x3c];
- *out++ = '-';
- }
- *out = '\0';
+ return base64_encode_real(in, inlen, out, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-");
}
static void yahoo_add_to_send_queue(struct yahoo_input_data *yid, void *data, int length)