libpurple/util.c

changeset 38341
3da74e727e78
parent 38340
aaa5e467901f
child 38358
30ba44276e74
child 38887
826f5da7b56c
equal deleted inserted replaced
38340:aaa5e467901f 38341:3da74e727e78
252 ascii[len * 3 - 1] = 0; 252 ascii[len * 3 - 1] = 0;
253 253
254 return ascii; 254 return ascii;
255 } 255 }
256 256
257
258 /************************************************************************** 257 /**************************************************************************
259 * Base64 Functions 258 * Quoted Printable Functions (see RFC 2045).
260 **************************************************************************/ 259 **************************************************************************/
261 static const char xdigits[] = 260 static const char xdigits[] =
262 "0123456789abcdef"; 261 "0123456789abcdef";
263 262
264 gchar *
265 purple_base64_encode(const guchar *data, gsize len)
266 {
267 return g_base64_encode(data, len);
268 }
269
270 guchar *
271 purple_base64_decode(const char *str, gsize *ret_len)
272 {
273 /*
274 * We want to allow ret_len to be NULL for backward compatibility,
275 * but g_base64_decode() requires a valid length variable. So if
276 * ret_len is NULL then pass in a dummy variable.
277 */
278 gsize unused;
279 return g_base64_decode(str, ret_len != NULL ? ret_len : &unused);
280 }
281
282 /**************************************************************************
283 * Quoted Printable Functions (see RFC 2045).
284 **************************************************************************/
285 guchar * 263 guchar *
286 purple_quotedp_decode(const char *str, gsize *ret_len) 264 purple_quotedp_decode(const char *str, gsize *ret_len)
287 { 265 {
288 char *n, *new; 266 char *n, *new;
289 const char *end, *p; 267 const char *end, *p;
439 guchar *decoded = NULL; 417 guchar *decoded = NULL;
440 gsize dec_len; 418 gsize dec_len;
441 if (g_ascii_strcasecmp(encoding, "Q") == 0) 419 if (g_ascii_strcasecmp(encoding, "Q") == 0)
442 decoded = purple_quotedp_decode(encoded_text, &dec_len); 420 decoded = purple_quotedp_decode(encoded_text, &dec_len);
443 else if (g_ascii_strcasecmp(encoding, "B") == 0) 421 else if (g_ascii_strcasecmp(encoding, "B") == 0)
444 decoded = purple_base64_decode(encoded_text, &dec_len); 422 decoded = g_base64_decode(encoded_text, &dec_len);
445 else 423 else
446 decoded = NULL; 424 decoded = NULL;
447 if (decoded) { 425 if (decoded) {
448 gsize len; 426 gsize len;
449 char *converted = g_convert((const gchar *)decoded, dec_len, "utf-8", charset, NULL, &len, NULL); 427 char *converted = g_convert((const gchar *)decoded, dec_len, "utf-8", charset, NULL, &len, NULL);

mercurial