* UCW Library -- URL Functions
*
* (c) 1997--2004 Martin Mares <mj@ucw.cz>
- * (c) 2001 Robert Spalek <robert@ucw.cz>
+ * (c) 2001--2005 Robert Spalek <robert@ucw.cz>
*
* This software may be freely distributed and used according to the terms
* of the GNU Lesser General Public License.
/* Escaping and de-escaping */
-uns
+static uns
enhex(uns x)
{
return (x<10) ? (x + '0') : (x - 10 + 'A');
return 0;
}
+int
+url_enescape_friendly(byte *src, byte *dest)
+{
+ byte *end = dest + MAX_URL_SIZE - 10;
+ while (*src)
+ {
+ if (dest >= end)
+ return URL_ERR_TOO_LONG;
+ if (*src < NCC_MAX)
+ *dest++ = NCC_CHARS[*src++];
+ else if (*src < 0x80)
+ *dest++ = *src++;
+ else
+ {
+ *dest++ = '%';
+ *dest++ = enhex(*src >> 4);
+ *dest++ = enhex(*src++ & 0x0f);
+ }
+ }
+ *dest = 0;
+ return 0;
+}
+
/* Split an URL (several parts may be copied to the destination buffer) */
byte *url_proto_names[URL_PROTO_MAX] = URL_PNAMES;
int url_deescape(byte *s, byte *d);
int url_enescape(byte *s, byte *d);
+int url_enescape_friendly(byte *src, byte *dest); // for cards.c only
/* URL splitting and normalization */
byte *buf, *bufend;
};
-uns enhex(uns x);
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);