all repos — cgit @ 382805ee83b6e6f165159312a9fe20e3971897b6

a hyperfast web frontend for git written in c

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>
Lars Hjemli hjemli@gmail.com
Tue, 26 Jun 2007 18:04:31 +0200
commit

382805ee83b6e6f165159312a9fe20e3971897b6

parent

42e459bb1f209df8278f4f4f0ee3f4bcfae80da8

3 files changed, 25 insertions(+), 2 deletions(-)

jump to
M cgit.hcgit.h

@@ -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);
M parsing.cparsing.c

@@ -168,7 +168,7 @@ p = strchr(cmd + 1, '/');

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);
M shared.cshared.c

@@ -228,7 +228,7 @@ cgit_query_has_sha1 = 1;

} 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); }

@@ -255,6 +255,28 @@ else if (c >= '0' && c <= '9')

return c - '0'; else 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,