summaryrefslogtreecommitdiffabout
path: root/parsing.c
Unidiff
Diffstat (limited to 'parsing.c') (more/less context) (ignore whitespace changes)
-rw-r--r--parsing.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/parsing.c b/parsing.c
index 36b0f0c..a028625 100644
--- a/parsing.c
+++ b/parsing.c
@@ -132,6 +132,49 @@ int cgit_parse_query(char *txt, configfn fn)
132 return 0; 132 return 0;
133} 133}
134 134
135/*
136 * url syntax: [repo ['/' cmd [ '/' path]]]
137 * repo: any valid repo url, may contain '/'
138 * cmd: log | commit | diff | tree | view | blob | snapshot
139 * path: any valid path, may contain '/'
140 *
141 */
142void cgit_parse_url(const char *url)
143{
144 char *cmd, *p;
145
146 cgit_repo = NULL;
147 if (!url || url[0] == '\0')
148 return;
149
150 cgit_repo = cgit_get_repoinfo(url);
151 if (cgit_repo) {
152 cgit_query_repo = cgit_repo->url;
153 return;
154 }
155
156 cmd = strchr(url, '/');
157 while (!cgit_repo && cmd) {
158 cmd[0] = '\0';
159 cgit_repo = cgit_get_repoinfo(url);
160 if (cgit_repo == NULL) {
161 cmd[0] = '/';
162 cmd = strchr(cmd + 1, '/');
163 continue;
164 }
165
166 cgit_query_repo = cgit_repo->url;
167 p = strchr(cmd + 1, '/');
168 if (p) {
169 p[0] = '\0';
170 cgit_query_path = xstrdup(p + 1);
171 }
172 cgit_cmd = cgit_get_cmd_index(cmd + 1);
173 cgit_query_page = xstrdup(cmd + 1);
174 return;
175 }
176}
177
135char *substr(const char *head, const char *tail) 178char *substr(const char *head, const char *tail)
136{ 179{
137 char *buf; 180 char *buf;