static uns url_max_repeat_length = 0;
static uns url_max_occurences = ~0U;
+#ifndef TEST
static struct cf_section url_config = {
CF_ITEMS {
CF_UNS("IgnoreSpaces", &url_ignore_spaces),
{
cf_declare_section("URL", &url_config, 0);
}
+#endif
/* Escaping and de-escaping */
val = NCC_AND; break;
case '#':
val = NCC_HASH; break;
+#ifndef CONFIG_URL_ESCAPE_COMPAT
case '$':
val = NCC_DOLLAR; break;
case '+':
val = NCC_PLUS; break;
case ',':
val = NCC_COMMA; break;
+#endif
}
*d++ = val;
s += 3;
if (d >= end)
return URL_ERR_TOO_LONG;
if (Calnum(c) || /* RFC 2396 (2.1-2.3): Only alphanumerics ... */
- c == '-' || c == '_' || c == '.' || c == '+' || c == '~' || /* ... and several other exceptions ... */
- c == '!' || c == '*' || c == '\'' || c == '(' || c == ')' ||
- c == '/' || c == '?' || c == ':' || c == '@' || /* ... and reserved chars used for reserved purpose */
- c == '=' || c == '&' || c == '#' || c == ';' ||
- c == '$' || c == '+' || c == ',')
+ c == '!' || c == '*' || c == '\'' || c == '(' || c == ')' || /* ... and some exceptions and reserved chars */
+ c == '$' || c == '-' || c == '_' || c == '.' || c == '+' ||
+ c == ',' || c == '=' || c == '&' || c == '#' || c == ';' ||
+ c == '/' || c == '?' || c == ':' || c == '@'
+#ifndef CONFIG_URL_ESCAPE_COMPAT
+ || c == '~'
+#endif
+ )
*d++ = *s++;
else
{
- uns val = ((byte)*s < NCC_MAX) ? NCC_CHARS[(byte)*s] : *s;
+ uns val = (byte)(((byte)*s < NCC_MAX) ? NCC_CHARS[(byte)*s] : *s);
*d++ = '%';
*d++ = enhex(val >> 4);
*d++ = enhex(val & 0x0f);
{
if (dest >= end)
return URL_ERR_TOO_LONG;
- if (*srcb < NCC_MAX)
+ if ((byte)*srcb < NCC_MAX)
*dest++ = NCC_CHARS[*srcb++];
else if (*srcb >= 0x20 && *srcb < 0x7f)
*dest++ = *srcb++;
else
{
*dest++ = '%';
- *dest++ = enhex(*srcb >> 4);
+ *dest++ = enhex((byte)*srcb >> 4);
*dest++ = enhex(*srcb++ & 0x0f);
}
}
static int url_proto_path_flags[URL_PROTO_MAX] = URL_PATH_FLAGS;
uns
-identify_protocol(const char *p)
+url_identify_protocol(const char *p)
{
uns i;
while (s < p)
*d++ = *s++;
*d++ = 0;
- u->protoid = identify_protocol(u->protocol);
+ u->protoid = url_identify_protocol(u->protocol);
s++;
if (url_proto_path_flags[u->protoid] && (s[0] != '/' || s[1] != '/'))
{
{
d = append(d, u->protocol, e);
d = append(d, ":", e);
- u->protoid = identify_protocol(u->protocol);
+ u->protoid = url_identify_protocol(u->protocol);
}
if (u->host)
{
char buf1[MAX_URL_SIZE], buf2[MAX_URL_SIZE], buf3[MAX_URL_SIZE], buf4[MAX_URL_SIZE];
int err;
struct url url, url0;
- char *base = "http://mj@www.hell.org/123/sub_dir/index.html;param?query&zzz/subquery#fragment";
+ char *base = "http://mj@www.hell.org/123/sub_dir;param/index.html;param?query&zzz/sub;query+#fragment?";
if (argc != 2 && argc != 3)
return 1;