Add trim_end() and use it to remove trailing slashes from repo paths
The new function removes all trailing instances of an arbitrary character from a copy of the supplied char array. This is then used to remove any trailing slashes from cgit_query_path. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
vanhempi
42e459bb1f
commit
382805ee83
1
cgit.h
1
cgit.h
@ -159,6 +159,7 @@ extern int chk_zero(int result, char *msg);
|
|||||||
extern int chk_positive(int result, char *msg);
|
extern int chk_positive(int result, char *msg);
|
||||||
|
|
||||||
extern int hextoint(char c);
|
extern int hextoint(char c);
|
||||||
|
extern char *trim_end(const char *str, char c);
|
||||||
|
|
||||||
extern void *cgit_free_commitinfo(struct commitinfo *info);
|
extern void *cgit_free_commitinfo(struct commitinfo *info);
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ void cgit_parse_url(const char *url)
|
|||||||
if (p) {
|
if (p) {
|
||||||
p[0] = '\0';
|
p[0] = '\0';
|
||||||
if (p[1])
|
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_cmd = cgit_get_cmd_index(cmd + 1);
|
||||||
cgit_query_page = xstrdup(cmd + 1);
|
cgit_query_page = xstrdup(cmd + 1);
|
||||||
|
24
shared.c
24
shared.c
@ -228,7 +228,7 @@ void cgit_querystring_cb(const char *name, const char *value)
|
|||||||
} else if (!strcmp(name, "ofs")) {
|
} else if (!strcmp(name, "ofs")) {
|
||||||
cgit_query_ofs = atoi(value);
|
cgit_query_ofs = atoi(value);
|
||||||
} else if (!strcmp(name, "path")) {
|
} else if (!strcmp(name, "path")) {
|
||||||
cgit_query_path = xstrdup(value);
|
cgit_query_path = trim_end(value, '/');
|
||||||
} else if (!strcmp(name, "name")) {
|
} else if (!strcmp(name, "name")) {
|
||||||
cgit_query_name = xstrdup(value);
|
cgit_query_name = xstrdup(value);
|
||||||
}
|
}
|
||||||
@ -257,6 +257,28 @@ int hextoint(char c)
|
|||||||
return -1;
|
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,
|
void cgit_diff_tree_cb(struct diff_queue_struct *q,
|
||||||
struct diff_options *options, void *data)
|
struct diff_options *options, void *data)
|
||||||
{
|
{
|
||||||
|
Ladataan…
Viittaa uudesa ongelmassa
Block a user