Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Oct 1999 13:55:09 +0200
From:      Alexander Langer <alex@cichlids.com>
To:        freebsd-hackers@freebsd.org
Subject:   vis(3), unvis(3), HTTP-URIs and libfetch
Message-ID:  <19991003135509.A4465@cichlids.cichlids.com>

next in thread | raw e-mail | index | archive | help

--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=us-ascii

Hello!

in fetch(3) we read:

BUGS
     No attempt is made to encode spaces etc. within URLs. Spaces in
	 the docu-
     ment part of an URLshould be replaced with "%20" in HTTP
     URLs and "\ " in
     FTP URLs.

I've started this encoding. DES told me to implement this in vis(3).

This is done by the attached patch and works here.
Example:
/bla bla/~tst/foo?test=foo+bar&bla=$string
becomes
/bla%20bla/%7Etest/foo?test=foo+bar&bla=$string

in a minimal application.

I added a new style const, VIS_HTTPSTYLE (as VIS_CSTYLE) to vis.h,
patch is also attached.

So libfetch can use vis(3) with the VIS_HTTPSTYLE flag to encode
HTTP-URIs, FTP-encoding could be added later easily, too.

But now I'm getting problems, that's why I write here:
unvis(3) wants to decode HTTPSTYLE strings.
while this is no problem for unvis(), I cannot add this to 
     int
	 strunvis(char *dst, const char *src)
because strunvis() really misses a flag param to tell it, how to
decode.
I need a new function - a new name.
I propose something like

int strunvisx(char *dst, const char *src, int flag);

strunvisx (or what the name will be) checks the flag.
If it is VIS_HTTPSTYLE it will use unvis() with the VIS_HTTPSTYLE
flag to decode the string. 
If it is VIS_FTPSTYLE (implemented later), it'll use unvis() with
VIS_FTPSTYLE.

In every other case strunvisx() just calls strunvis().

Alex
-- 
I doubt, therefore I might be. 

--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="vis.c.diff"

--- /usr/src/lib/libc/gen/vis.c	Fri Jul 12 20:54:15 1996
+++ vis.c	Sat Oct  2 20:20:17 1999
@@ -52,6 +52,21 @@
 	register int flag;
 {
 	c = (unsigned char)c;
+
+	if (flag & VIS_HTTPSTYLE) {
+	    if (!((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z')
+		|| (c >= 'a' && c <= 'z') || c == '$' || c == '-'
+		|| c == '_' || c == '\'' || c == '+' || c == '!' ||
+		c == '(' || c == ')' || c == ',' || c == '"' ||
+		c == ';' || c == '/' || c == '?' || c == ':' ||
+		c == '@' || c == '&' || c == '=' || c == '+')) {
+		*dst++ = '%';
+		snprintf(dst, 4, (c < 16 ? "0%X" : "%X"), c);
+		dst += 2;
+		goto done;
+	    }
+	}
+
 	if (isgraph(c) ||
 	   ((flag & VIS_SP) == 0 && c == ' ') ||
 	   ((flag & VIS_TAB) == 0 && c == '\t') ||

--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="vis.h.diff"

--- /usr/src/include/vis.h	Sun Aug 29 16:38:58 1999
+++ vis.h	Sun Oct  3 13:45:00 1999
@@ -64,6 +64,7 @@
  * other
  */
 #define	VIS_NOSLASH	0x40	/* inhibit printing '\' */
+#define	VIS_HTTPSTYLE	0x80	/* http-style escape % HEX HEX */
 
 /*
  * unvis return codes

--IJpNTDwzlM2Ie8A6--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19991003135509.A4465>