about summary refs log tree commit
diff options
context:
space:
mode:
-rw-r--r--parsing.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/parsing.c b/parsing.c
index 599f61e..5b4b1f4 100644
--- a/parsing.c
+++ b/parsing.c
@@ -17,7 +17,8 @@
  */
 void cgit_parse_url(const char *url)
 {
-        char *cmd, *p;
+        char *c, *cmd, *p;
+        struct cgit_repo *repo;
 
         ctx.repo = NULL;
         if (!url || url[0] == '\0')
@@ -29,16 +30,20 @@ void cgit_parse_url(const char *url)
                 return;
         }
 
-        cmd = strchr(url, '/');
-        while (!ctx.repo && cmd) {
-                cmd[0] = '\0';
-                ctx.repo = cgit_get_repoinfo(url);
-                if (ctx.repo == NULL) {
-                        cmd[0] = '/';
-                        cmd = strchr(cmd + 1, '/');
-                        continue;
+        cmd = NULL;
+        c = strchr(url, '/');
+        while (c) {
+                c[0] = '\0';
+                repo = cgit_get_repoinfo(url);
+                if (repo) {
+                        ctx.repo = repo;
+                        cmd = c;
                 }
+                c[0] = '/';
+                c = strchr(c + 1, '/');
+        }
 
+        if (ctx.repo) {
                 ctx.qry.repo = ctx.repo->url;
                 p = strchr(cmd + 1, '/');
                 if (p) {