/* Standard cookbook recipes */
int
-url_canon_split(byte *u, byte *buf1, byte *buf2, struct url *url)
+url_canon_split_rel(byte *u, byte *buf1, byte *buf2, struct url *url, struct url *base)
{
int err;
return err;
if (err = url_split(buf1, url, buf2))
return err;
- if (err = url_normalize(url, NULL))
+ if (err = url_normalize(url, base))
return err;
return url_canonicalize(url);
}
int
-url_auto_canonicalize(byte *src, byte *dst)
+url_auto_canonicalize_rel(byte *src, byte *dst, struct url *base)
{
byte buf1[MAX_URL_SIZE], buf2[MAX_URL_SIZE], buf3[MAX_URL_SIZE];
int err;
struct url ur;
- (void)((err = url_canon_split(src, buf1, buf2, &ur)) ||
+ (void)((err = url_canon_split_rel(src, buf1, buf2, &ur, base)) ||
(err = url_pack(&ur, buf3)) ||
(err = url_enescape(buf3, dst)));
return err;
/* Remove/Introduce '%' escapes */
-int url_deescape(byte *, byte *);
-int url_enescape(byte *, byte *);
+int url_deescape(byte *s, byte *d);
+int url_enescape(byte *s, byte *d);
/* URL splitting and normalization */
byte *buf, *bufend;
};
-int url_split(byte *, struct url *, byte *);
-int url_normalize(struct url *, struct url *);
-int url_canonicalize(struct url *);
-int url_pack(struct url *, byte *);
-int url_canon_split(byte *, byte *, byte *, struct url *);
-int url_auto_canonicalize(byte *, byte *);
-uns identify_protocol(byte *);
+int url_split(byte *s, struct url *u, byte *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(byte *url, byte *buf1, byte *buf2, struct url *u, struct url *base);
+int url_auto_canonicalize_rel(byte *src, byte *dst, struct url *base);
+uns identify_protocol(byte *p);
int url_has_repeated_component(byte *url);
+static inline int url_canon_split(byte *url, byte *buf1, byte *buf2, struct url *u)
+{ return url_canon_split_rel(url, buf1, buf2, u, NULL); }
+
+static inline int url_auto_canonicalize(byte *src, byte *dst)
+{ return url_auto_canonicalize_rel(src, dst, NULL); }
+
/* Error codes */
char *url_error(uns);