summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.h1
-rw-r--r--parsing.c2
-rw-r--r--shared.c24
3 files changed, 25 insertions, 2 deletions
diff --git a/cgit.h b/cgit.h
index 81c819d..ddb2fff 100644
--- a/cgit.h
+++ b/cgit.h
@@ -156,12 +156,13 @@ extern void cgit_repo_config_cb(const char *name, const char *value);
156extern void cgit_querystring_cb(const char *name, const char *value); 156extern void cgit_querystring_cb(const char *name, const char *value);
157 157
158extern int chk_zero(int result, char *msg); 158extern int chk_zero(int result, char *msg);
159extern int chk_positive(int result, char *msg); 159extern int chk_positive(int result, char *msg);
160 160
161extern int hextoint(char c); 161extern int hextoint(char c);
162extern char *trim_end(const char *str, char c);
162 163
163extern void *cgit_free_commitinfo(struct commitinfo *info); 164extern void *cgit_free_commitinfo(struct commitinfo *info);
164 165
165extern int cgit_diff_files(const unsigned char *old_sha1, 166extern int cgit_diff_files(const unsigned char *old_sha1,
166 const unsigned char *new_sha1, 167 const unsigned char *new_sha1,
167 linediff_fn fn); 168 linediff_fn fn);
diff --git a/parsing.c b/parsing.c
index 74a2484..2c05c09 100644
--- a/parsing.c
+++ b/parsing.c
@@ -165,13 +165,13 @@ void cgit_parse_url(const char *url)
165 165
166 cgit_query_repo = cgit_repo->url; 166 cgit_query_repo = cgit_repo->url;
167 p = strchr(cmd + 1, '/'); 167 p = strchr(cmd + 1, '/');
168 if (p) { 168 if (p) {
169 p[0] = '\0'; 169 p[0] = '\0';
170 if (p[1]) 170 if (p[1])
171 cgit_query_path = xstrdup(p + 1); 171 cgit_query_path = trim_end(p + 1, '/');
172 } 172 }
173 cgit_cmd = cgit_get_cmd_index(cmd + 1); 173 cgit_cmd = cgit_get_cmd_index(cmd + 1);
174 cgit_query_page = xstrdup(cmd + 1); 174 cgit_query_page = xstrdup(cmd + 1);
175 return; 175 return;
176 } 176 }
177} 177}
diff --git a/shared.c b/shared.c
index ab00bc9..45db735 100644
--- a/shared.c
+++ b/shared.c
@@ -225,13 +225,13 @@ void cgit_querystring_cb(const char *name, const char *value)
225 } else if (!strcmp(name, "id2")) { 225 } else if (!strcmp(name, "id2")) {
226 cgit_query_sha2 = xstrdup(value); 226 cgit_query_sha2 = xstrdup(value);
227 cgit_query_has_sha1 = 1; 227 cgit_query_has_sha1 = 1;
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 }
235} 235}
236 236
237void *cgit_free_commitinfo(struct commitinfo *info) 237void *cgit_free_commitinfo(struct commitinfo *info)
@@ -254,12 +254,34 @@ int hextoint(char c)
254 else if (c >= '0' && c <= '9') 254 else if (c >= '0' && c <= '9')
255 return c - '0'; 255 return c - '0';
256 else 256 else
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{
263 int i; 285 int i;
264 286
265 for (i = 0; i < q->nr; i++) { 287 for (i = 0; i < q->nr; i++) {