Mercurial > pidgin
comparison src/util.c @ 11137:096020ae09a9
[gaim-migrate @ 13201]
Some more deworming. I mean, dewarning.
I also realized that lots of glib uses guchar* instead of guint* for
passing around bits of binary data, so I changed some stuff in util.c
that I'd already changed.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 21 Jul 2005 05:49:48 +0000 |
parents | f2755f58a7da |
children | ee059fe9b362 |
comparison
equal
deleted
inserted
replaced
11136:6270b6ad69a2 | 11137:096020ae09a9 |
---|---|
66 | 66 |
67 /************************************************************************** | 67 /************************************************************************** |
68 * Base16 Functions | 68 * Base16 Functions |
69 **************************************************************************/ | 69 **************************************************************************/ |
70 gchar * | 70 gchar * |
71 gaim_base16_encode(const guint8 *data, gsize len) | 71 gaim_base16_encode(const guchar *data, gsize len) |
72 { | 72 { |
73 int i; | 73 int i; |
74 gchar *ascii = NULL; | 74 gchar *ascii = NULL; |
75 | 75 |
76 g_return_val_if_fail(data != NULL, NULL); | 76 g_return_val_if_fail(data != NULL, NULL); |
82 snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); | 82 snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); |
83 | 83 |
84 return ascii; | 84 return ascii; |
85 } | 85 } |
86 | 86 |
87 guint8 * | 87 guchar * |
88 gaim_base16_decode(const char *str, gsize *ret_len) | 88 gaim_base16_decode(const char *str, gsize *ret_len) |
89 { | 89 { |
90 int len, i, accumulator = 0; | 90 int len, i, accumulator = 0; |
91 guint8 *data; | 91 guchar *data; |
92 | 92 |
93 g_return_val_if_fail(str != NULL, NULL); | 93 g_return_val_if_fail(str != NULL, NULL); |
94 | 94 |
95 len = strlen(str); | 95 len = strlen(str); |
96 | 96 |
140 | 140 |
141 static const char xdigits[] = | 141 static const char xdigits[] = |
142 "0123456789abcdef"; | 142 "0123456789abcdef"; |
143 | 143 |
144 gchar * | 144 gchar * |
145 gaim_base64_encode(const guint8 *data, gsize len) | 145 gaim_base64_encode(const guchar *data, gsize len) |
146 { | 146 { |
147 char *out, *rv; | 147 char *out, *rv; |
148 | 148 |
149 g_return_val_if_fail(data != NULL, NULL); | 149 g_return_val_if_fail(data != NULL, NULL); |
150 g_return_val_if_fail(len > 0, NULL); | 150 g_return_val_if_fail(len > 0, NULL); |
178 *out = '\0'; | 178 *out = '\0'; |
179 | 179 |
180 return rv; | 180 return rv; |
181 } | 181 } |
182 | 182 |
183 guint8 * | 183 guchar * |
184 gaim_base64_decode(const char *str, gsize *ret_len) | 184 gaim_base64_decode(const char *str, gsize *ret_len) |
185 { | 185 { |
186 guint8 *out = NULL; | 186 guchar *out = NULL; |
187 char tmp = 0; | 187 char tmp = 0; |
188 const char *c; | 188 const char *c; |
189 gint32 tmp2 = 0; | 189 gint32 tmp2 = 0; |
190 int len = 0, n = 0; | 190 int len = 0, n = 0; |
191 | 191 |
208 c++; | 208 c++; |
209 continue; | 209 continue; |
210 } else if (*c == '=') { | 210 } else if (*c == '=') { |
211 if (n == 3) { | 211 if (n == 3) { |
212 out = g_realloc(out, len + 2); | 212 out = g_realloc(out, len + 2); |
213 out[len] = (guint8)(tmp2 >> 10) & 0xff; | 213 out[len] = (guchar)(tmp2 >> 10) & 0xff; |
214 len++; | 214 len++; |
215 out[len] = (guint8)(tmp2 >> 2) & 0xff; | 215 out[len] = (guchar)(tmp2 >> 2) & 0xff; |
216 len++; | 216 len++; |
217 } else if (n == 2) { | 217 } else if (n == 2) { |
218 out = g_realloc(out, len + 1); | 218 out = g_realloc(out, len + 1); |
219 out[len] = (guint8)(tmp2 >> 4) & 0xff; | 219 out[len] = (guchar)(tmp2 >> 4) & 0xff; |
220 len++; | 220 len++; |
221 } | 221 } |
222 break; | 222 break; |
223 } | 223 } |
224 tmp2 = ((tmp2 << 6) | (tmp & 0xff)); | 224 tmp2 = ((tmp2 << 6) | (tmp & 0xff)); |
225 n++; | 225 n++; |
226 if (n == 4) { | 226 if (n == 4) { |
227 out = g_realloc(out, len + 3); | 227 out = g_realloc(out, len + 3); |
228 out[len] = (guint8)((tmp2 >> 16) & 0xff); | 228 out[len] = (guchar)((tmp2 >> 16) & 0xff); |
229 len++; | 229 len++; |
230 out[len] = (guint8)((tmp2 >> 8) & 0xff); | 230 out[len] = (guchar)((tmp2 >> 8) & 0xff); |
231 len++; | 231 len++; |
232 out[len] = (guint8)(tmp2 & 0xff); | 232 out[len] = (guchar)(tmp2 & 0xff); |
233 len++; | 233 len++; |
234 tmp2 = 0; | 234 tmp2 = 0; |
235 n = 0; | 235 n = 0; |
236 } | 236 } |
237 c++; | 237 c++; |
247 } | 247 } |
248 | 248 |
249 /************************************************************************** | 249 /************************************************************************** |
250 * Quoted Printable Functions (see RFC 2045). | 250 * Quoted Printable Functions (see RFC 2045). |
251 **************************************************************************/ | 251 **************************************************************************/ |
252 guint8 * | 252 guchar * |
253 gaim_quotedp_decode(const char *str, gsize *ret_len) | 253 gaim_quotedp_decode(const char *str, gsize *ret_len) |
254 { | 254 { |
255 char *n, *new; | 255 char *n, *new; |
256 const char *end, *p; | 256 const char *end, *p; |
257 | 257 |
291 *ret_len = n - new; | 291 *ret_len = n - new; |
292 | 292 |
293 /* Resize to take less space */ | 293 /* Resize to take less space */ |
294 /* new = realloc(new, n - new); */ | 294 /* new = realloc(new, n - new); */ |
295 | 295 |
296 return (guint8 *)new; | 296 return (guchar *)new; |
297 } | 297 } |
298 | 298 |
299 /************************************************************************** | 299 /************************************************************************** |
300 * MIME Functions | 300 * MIME Functions |
301 **************************************************************************/ | 301 **************************************************************************/ |
408 case state_question4: | 408 case state_question4: |
409 if (*cur == '=') { /* Got the whole encoded-word */ | 409 if (*cur == '=') { /* Got the whole encoded-word */ |
410 char *charset = g_strndup(charset0, encoding0 - charset0 - 1); | 410 char *charset = g_strndup(charset0, encoding0 - charset0 - 1); |
411 char *encoding = g_strndup(encoding0, encoded_text0 - encoding0 - 1); | 411 char *encoding = g_strndup(encoding0, encoded_text0 - encoding0 - 1); |
412 char *encoded_text = g_strndup(encoded_text0, cur - encoded_text0 - 1); | 412 char *encoded_text = g_strndup(encoded_text0, cur - encoded_text0 - 1); |
413 guint8 *decoded = NULL; | 413 guchar *decoded = NULL; |
414 gsize dec_len; | 414 gsize dec_len; |
415 if (g_ascii_strcasecmp(encoding, "Q") == 0) | 415 if (g_ascii_strcasecmp(encoding, "Q") == 0) |
416 decoded = gaim_quotedp_decode(encoded_text, &dec_len); | 416 decoded = gaim_quotedp_decode(encoded_text, &dec_len); |
417 else if (g_ascii_strcasecmp(encoding, "B") == 0) | 417 else if (g_ascii_strcasecmp(encoding, "B") == 0) |
418 decoded = gaim_base64_decode(encoded_text, &dec_len); | 418 decoded = gaim_base64_decode(encoded_text, &dec_len); |