summaryrefslogtreecommitdiffabout
path: root/shared.c
Unidiff
Diffstat (limited to 'shared.c') (more/less context) (show whitespace changes)
-rw-r--r--shared.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/shared.c b/shared.c
index ab00bc9..45db735 100644
--- a/shared.c
+++ b/shared.c
@@ -228,7 +228,7 @@ void cgit_querystring_cb(const char *name, const char *value)
228 } else if (!strcmp(name, "ofs")) { 228 } else if (!strcmp(name, "ofs")) {
229 cgit_query_ofs = atoi(value); 229 cgit_query_ofs = atoi(value);
230 } else if (!strcmp(name, "path")) { 230 } else if (!strcmp(name, "path")) {
231 cgit_query_path = xstrdup(value); 231 cgit_query_path = trim_end(value, '/');
232 } else if (!strcmp(name, "name")) { 232 } else if (!strcmp(name, "name")) {
233 cgit_query_name = xstrdup(value); 233 cgit_query_name = xstrdup(value);
234 } 234 }
@@ -257,6 +257,28 @@ int hextoint(char c)
257 return -1; 257 return -1;
258} 258}
259 259
260char *trim_end(const char *str, char c)
261{
262 int len;
263 char *s, *t;
264
265 if (str == NULL)
266 return NULL;
267 t = (char *)str;
268 len = strlen(t);
269 while(len > 0 && t[len - 1] == c)
270 len--;
271
272 if (len == 0)
273 return NULL;
274
275 c = t[len];
276 t[len] = '\0';
277 s = xstrdup(t);
278 t[len] = c;
279 return s;
280}
281
260void cgit_diff_tree_cb(struct diff_queue_struct *q, 282void cgit_diff_tree_cb(struct diff_queue_struct *q,
261 struct diff_options *options, void *data) 283 struct diff_options *options, void *data)
262{ 284{