diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-03-26 20:22:30 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-03-26 20:22:30 +0200 |
commit | d4da667861b8802215894dcd1c6867c9e969ad6f (patch) | |
tree | 0e212dc01b26b440a3a168e9f246e92b1a5298d7 /sys/src/cmd/webfs | |
parent | 4558207db0490d2c6256c787ebc0e27f10e0a3ec (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.c | 17 |
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; |