summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-03-26 20:22:30 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-03-26 20:22:30 +0200
commitd4da667861b8802215894dcd1c6867c9e969ad6f (patch)
tree0e212dc01b26b440a3a168e9f246e92b1a5298d7 /sys/src/cmd/webfs
parent4558207db0490d2c6256c787ebc0e27f10e0a3ec (diff)
webfs: don't fold empty path segments in url
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r--sys/src/cmd/webfs/url.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/sys/src/cmd/webfs/url.c b/sys/src/cmd/webfs/url.c
index 83dad1938..784a67393 100644
--- a/sys/src/cmd/webfs/url.c
+++ b/sys/src/cmd/webfs/url.c
@@ -120,12 +120,11 @@ remdot(char *s)
dir = 1;
b = d = s;
- while(*s == '/')
+ if(*s == '/')
s++;
for(; s; s = p){
if(p = strchr(s, '/'))
- while(*p == '/')
- *p++ = 0;
+ *p++ = 0;
if(*s == '.' && ((s[1] == 0) || (s[1] == '.' && s[2] == 0))){
if(s[1] == '.')
while(d > b)
@@ -135,10 +134,10 @@ remdot(char *s)
continue;
} else
dir = (p != nil);
- n = strlen(s);
- memmove(d+1, s, n);
- *d = '/';
- d += n+1;
+ if((n = strlen(s)) > 0)
+ memmove(d+1, s, n);
+ *d++ = '/';
+ d += n;
}
if(dir)
*d++ = '/';
@@ -156,7 +155,7 @@ abspath(char *s, char *b)
return estrdup(b);
if(*s != '/' && (x = strrchr(b, '/'))){
a = emalloc((x - b) + strlen(s) + 4);
- sprint(a, "/%.*s/%s", (int)(x - b), b, s);
+ sprint(a, "%.*s/%s", (int)(x - b), b, s);
return remdot(a);
}
}
@@ -164,7 +163,7 @@ abspath(char *s, char *b)
if(*s != '/')
return estrdup(s);
a = emalloc(strlen(s) + 4);
- sprint(a, "/%s", s);
+ sprint(a, "%s", s);
return remdot(a);
}
return nil;