| 253 * - str - ciąg znaków do poprawki. |
254 * - str - ciąg znaków do poprawki. |
| 254 * |
255 * |
| 255 * zwraca zaalokowany bufor, który wypadałoby kiedyś zwolnić albo NULL |
256 * zwraca zaalokowany bufor, który wypadałoby kiedyś zwolnić albo NULL |
| 256 * w przypadku błędu. |
257 * w przypadku błędu. |
| 257 */ |
258 */ |
| 258 char *gg_urlencode(char *str) |
259 char *gg_urlencode(const char *str) |
| 259 { |
260 { |
| 260 char *p, *q, *buf, hex[] = "0123456789abcdef"; |
261 const char *p, hex[] = "0123456789abcdef"; |
| |
262 char *q, *buf; |
| |
263 |
| 261 int size = 0; |
264 int size = 0; |
| 262 |
265 |
| 263 if (!str) |
266 if (!str) |
| 264 str = strdup(""); |
267 str = ""; |
| 265 |
268 |
| 266 for (p = str; *p; p++, size++) { |
269 for (p = str; *p; p++, size++) { |
| 267 if (!((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9'))) |
270 if (!((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9'))) |
| 268 size += 2; |
271 size += 2; |
| 269 } |
272 } |
| 270 |
273 |
| 271 if (!(buf = malloc(size + 1))) |
274 buf = g_new(char, size + 1); |
| 272 return NULL; |
|
| 273 |
275 |
| 274 for (p = str, q = buf; *p; p++, q++) { |
276 for (p = str, q = buf; *p; p++, q++) { |
| 275 if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9')) |
277 if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9')) |
| 276 *q = *p; |
278 *q = *p; |
| 277 else { |
279 else { |