URI *uri_parse_raw(const char *str, int raw);
int uri_parse_into(URI *uri, const char *str);
char *uri_to_string(URI *uri);
-char *uri_string_escape(const char *str, const char *list);
void uri_free(URI *uri);
/* Single web service query parameter 'name=value'. */
g_free(uri);
}
-/************************************************************************
- * *
- * Helper functions *
- * *
- ************************************************************************/
-
-/**
- * uri_string_escape:
- * @str: string to escape
- * @list: exception list string of chars not to escape
- *
- * This routine escapes a string to hex, ignoring reserved characters (a-z)
- * and the characters in the exception list.
- *
- * Returns a new escaped string or NULL in case of error.
- */
-char *uri_string_escape(const char *str, const char *list)
-{
- char *ret, ch;
- char *temp;
- const char *in;
- int len, out;
-
- if (str == NULL) {
- return NULL;
- }
- if (str[0] == 0) {
- return g_strdup(str);
- }
- len = strlen(str);
- if (!(len > 0)) {
- return NULL;
- }
-
- len += 20;
- ret = g_malloc(len);
- in = str;
- out = 0;
- while (*in != 0) {
- if (len - out <= 3) {
- temp = realloc2n(ret, &len);
- ret = temp;
- }
-
- ch = *in;
-
- if ((ch != '@') && (!IS_UNRESERVED(ch)) && (!strchr(list, ch))) {
- unsigned char val;
- ret[out++] = '%';
- val = ch >> 4;
- if (val <= 9) {
- ret[out++] = '0' + val;
- } else {
- ret[out++] = 'A' + val - 0xA;
- }
- val = ch & 0xF;
- if (val <= 9) {
- ret[out++] = '0' + val;
- } else {
- ret[out++] = 'A' + val - 0xA;
- }
- in++;
- } else {
- ret[out++] = *in++;
- }
- }
- ret[out] = 0;
- return ret;
-}
-
/************************************************************************
* *
* Public functions *