diff options
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | parsing.c | 2 | ||||
| -rw-r--r-- | shared.c | 24 | 
3 files changed, 25 insertions, 2 deletions
| @@ -159,6 +159,7 @@ extern int chk_zero(int result, char *msg);  extern int chk_positive(int result, char *msg);  extern int hextoint(char c); +extern char *trim_end(const char *str, char c);  extern void *cgit_free_commitinfo(struct commitinfo *info); @@ -168,7 +168,7 @@ void cgit_parse_url(const char *url)  		if (p) {  			p[0] = '\0';  			if (p[1]) -				cgit_query_path = xstrdup(p + 1); +				cgit_query_path = trim_end(p + 1, '/');  		}  		cgit_cmd = cgit_get_cmd_index(cmd + 1);  		cgit_query_page = xstrdup(cmd + 1); @@ -228,7 +228,7 @@ void cgit_querystring_cb(const char *name, const char *value)  	} else if (!strcmp(name, "ofs")) {  		cgit_query_ofs = atoi(value);  	} else if (!strcmp(name, "path")) { -		cgit_query_path = xstrdup(value); +		cgit_query_path = trim_end(value, '/');  	} else if (!strcmp(name, "name")) {  		cgit_query_name = xstrdup(value);  	} @@ -257,6 +257,28 @@ int hextoint(char c)  		return -1;  } +char *trim_end(const char *str, char c) +{ +	int len; +	char *s, *t; + +	if (str == NULL) +		return NULL; +	t = (char *)str; +	len = strlen(t); +	while(len > 0 && t[len - 1] == c) +		len--; + +	if (len == 0) +		return NULL; + +	c = t[len]; +	t[len] = '\0'; +	s = xstrdup(t); +	t[len] = c; +	return s; +} +  void cgit_diff_tree_cb(struct diff_queue_struct *q,  		       struct diff_options *options, void *data)  { | 
