From: Fredrik Tolf Date: Sun, 5 Sep 2010 02:32:17 +0000 (+0200) Subject: Merge branch 'recurse' X-Git-Tag: 0.1~26 X-Git-Url: http://dolda2000.com/gitweb/?a=commitdiff_plain;h=7f5a46defa51aef52a9b2aca958d90c01b8804ed;hp=2d65add085285c9df22b9c9bf7d5f2521d9f61cd;p=ashd.git Merge branch 'recurse' --- diff --git a/lib/resp.c b/lib/resp.c index 1b08b00..7de5c90 100644 --- a/lib/resp.c +++ b/lib/resp.c @@ -121,7 +121,7 @@ void simpleerror(int fd, int code, char *msg, char *fmt, ...) void stdredir(struct hthead *req, int fd, int code, char *dst) { FILE *out; - char *sp, *cp, *ep, *path, *url, *adst, *proto, *host; + char *sp, *cp, *ep, *qs, *path, *url, *adst, *proto, *host; sp = strchr(dst, '/'); cp = strchr(dst, ':'); @@ -140,11 +140,14 @@ void stdredir(struct hthead *req, int fd, int code, char *dst) } else { if((*(url = req->url)) == '/') url++; - if((ep = strrchr(url, '/')) != NULL) - ep++; - else - ep = url; - path = sprintf2("%.*s%s", ep - url, url, dst); + if((ep = strchr(url, '?')) == NULL) { + ep = url + strlen(url); + qs = ""; + } else { + qs = ep; + } + for(; (ep > url) && (ep[-1] != '/'); ep--); + path = sprintf2("%.*s%s%s", ep - url, url, dst, qs); } adst = sprintf2("%s://%s/%s", proto, host, path); free(path);