}
int
-url_deescape(const byte *s, byte *d)
+url_deescape(const char *s, char *d)
{
- byte *dstart = d;
- byte *end = d + MAX_URL_SIZE - 10;
+ char *dstart = d;
+ char *end = d + MAX_URL_SIZE - 10;
while (*s)
{
if (d >= end)
*d++ = val;
s += 3;
}
- else if (*s > 0x20)
+ else if ((byte) *s > 0x20)
*d++ = *s++;
else if (Cspace(*s))
{
- const byte *s0 = s;
+ const char *s0 = s;
while (Cspace(*s))
s++;
if (!url_ignore_spaces || !(!*s || d == dstart))
}
int
-url_enescape(const byte *s, byte *d)
+url_enescape(const char *s, char *d)
{
- byte *end = d + MAX_URL_SIZE - 10;
+ char *end = d + MAX_URL_SIZE - 10;
unsigned int c;
while (c = *s)
*d++ = *s++;
else
{
- uns val = (*s < NCC_MAX) ? NCC_CHARS[*s] : *s;
+ uns val = ((byte)*s < NCC_MAX) ? NCC_CHARS[(byte)*s] : *s;
*d++ = '%';
*d++ = enhex(val >> 4);
*d++ = enhex(val & 0x0f);
}
int
-url_enescape_friendly(const byte *src, byte *dest)
+url_enescape_friendly(const char *src, char *dest)
{
- byte *end = dest + MAX_URL_SIZE - 10;
- while (*src)
+ char *end = dest + MAX_URL_SIZE - 10;
+ const byte *srcb = src;
+ while (*srcb)
{
if (dest >= end)
return URL_ERR_TOO_LONG;
- if (*src < NCC_MAX)
- *dest++ = NCC_CHARS[*src++];
- else if (*src >= 0x20 && *src < 0x7f)
- *dest++ = *src++;
+ if (*srcb < NCC_MAX)
+ *dest++ = NCC_CHARS[*srcb++];
+ else if (*srcb >= 0x20 && *srcb < 0x7f)
+ *dest++ = *srcb++;
else
{
*dest++ = '%';
- *dest++ = enhex(*src >> 4);
- *dest++ = enhex(*src++ & 0x0f);
+ *dest++ = enhex(*srcb >> 4);
+ *dest++ = enhex(*srcb++ & 0x0f);
}
}
*dest = 0;
/* Split an URL (several parts may be copied to the destination buffer) */
-byte *url_proto_names[URL_PROTO_MAX] = URL_PNAMES;
+char *url_proto_names[URL_PROTO_MAX] = URL_PNAMES;
static int url_proto_path_flags[URL_PROTO_MAX] = URL_PATH_FLAGS;
uns
-identify_protocol(const byte *p)
+identify_protocol(const char *p)
{
uns i;
}
int
-url_split(byte *s, struct url *u, byte *d)
+url_split(char *s, struct url *u, char *d)
{
bzero(u, sizeof(struct url));
u->port = ~0;
if (s[0] != '/') /* Seek for "protocol:" */
{
- byte *p = s;
+ char *p = s;
while (*p && Calnum(*p))
p++;
if (p != s && *p == ':')
{
if (s[1] == '/') /* Host spec */
{
- byte *q, *e;
- byte *at = NULL;
+ char *q, *e;
+ char *at = NULL;
char *ep;
s += 2;
static int
relpath_merge(struct url *u, struct url *b)
{
- byte *a = u->rest;
- byte *o = b->rest;
- byte *d = u->buf;
- byte *e = u->bufend;
- byte *p;
+ char *a = u->rest;
+ char *o = b->rest;
+ char *d = u->buf;
+ char *e = u->bufend;
+ char *p;
if (a[0] == '/') /* Absolute path => OK */
return 0;
/* Name canonicalization */
static void
-lowercase(byte *b)
+lowercase(char *b)
{
if (b)
while (*b)
}
static void
-kill_end_dot(byte *b)
+kill_end_dot(char *b)
{
- byte *k;
+ char *k;
if (b)
{
/* Pack a broken-down URL */
-static byte *
-append(byte *d, const byte *s, byte *e)
+static char *
+append(char *d, const char *s, char *e)
{
if (d)
while (*s)
}
int
-url_pack(struct url *u, byte *d)
+url_pack(struct url *u, char *d)
{
- byte *e = d + MAX_URL_SIZE - 10;
+ char *e = d + MAX_URL_SIZE - 10;
if (u->protocol)
{
/* Standard cookbook recipes */
int
-url_canon_split_rel(const byte *u, byte *buf1, byte *buf2, struct url *url, struct url *base)
+url_canon_split_rel(const char *u, char *buf1, char *buf2, struct url *url, struct url *base)
{
int err;
}
int
-url_auto_canonicalize_rel(const byte *src, byte *dst, struct url *base)
+url_auto_canonicalize_rel(const char *src, char *dst, struct url *base)
{
- byte buf1[MAX_URL_SIZE], buf2[MAX_URL_SIZE], buf3[MAX_URL_SIZE];
+ char buf1[MAX_URL_SIZE], buf2[MAX_URL_SIZE], buf3[MAX_URL_SIZE];
int err;
struct url ur;
#endif
struct component {
- const byte *start;
+ const char *start;
int length;
uns count;
u32 hash;
};
static inline u32
-hashf(const byte *start, int length)
+hashf(const char *start, int length)
{
u32 hf = length;
while (length-- > 0)
}
int
-url_has_repeated_component(const byte *url)
+url_has_repeated_component(const char *url)
{
struct component *comp;
uns comps, comp_len, rep_prefix, hash_size, *hash, *next;
- const byte *c;
+ const char *c;
uns i, j, k;
for (comps=0, c=url; c; comps++)
/* Remove/Introduce '%' escapes */
-int url_deescape(const byte *s, byte *d);
-int url_enescape(const byte *s, byte *d);
-int url_enescape_friendly(const byte *src, byte *dest); // for cards.c only
+int url_deescape(const char *s, char *d);
+int url_enescape(const char *s, char *d);
+int url_enescape_friendly(const char *src, char *dest); // for cards.c only
/* URL splitting and normalization */
struct url {
- byte *protocol;
+ char *protocol;
uns protoid;
- byte *user;
- byte *pass;
- byte *host;
+ char *user;
+ char *pass;
+ char *host;
uns port; /* ~0 if unspec */
- byte *rest;
- byte *buf, *bufend;
+ char *rest;
+ char *buf, *bufend;
};
-int url_split(byte *s, struct url *u, byte *d);
+int url_split(char *s, struct url *u, char *d);
int url_normalize(struct url *u, struct url *b);
int url_canonicalize(struct url *u);
-int url_pack(struct url *u, byte *d);
-int url_canon_split_rel(const byte *url, byte *buf1, byte *buf2, struct url *u, struct url *base);
-int url_auto_canonicalize_rel(const byte *src, byte *dst, struct url *base);
-uns identify_protocol(const byte *p);
-int url_has_repeated_component(const byte *url);
+int url_pack(struct url *u, char *d);
+int url_canon_split_rel(const char *url, char *buf1, char *buf2, struct url *u, struct url *base);
+int url_auto_canonicalize_rel(const char *src, char *dst, struct url *base);
+uns identify_protocol(const char *p);
+int url_has_repeated_component(const char *url);
-static inline int url_canon_split(const byte *url, byte *buf1, byte *buf2, struct url *u)
+static inline int url_canon_split(const char *url, char *buf1, char *buf2, struct url *u)
{ return url_canon_split_rel(url, buf1, buf2, u, NULL); }
-static inline int url_auto_canonicalize(const byte *src, byte *dst)
+static inline int url_auto_canonicalize(const char *src, char *dst)
{ return url_auto_canonicalize_rel(src, dst, NULL); }
/* Error codes */
#define URL_DEFPORTS { ~0, 80, 21, 0 }
#define URL_PATH_FLAGS { 0, 1, 1, 1 }
-extern byte *url_proto_names[];
+extern char *url_proto_names[];
#endif