aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--cgit.h1
-rw-r--r--shared.c15
2 files changed, 16 insertions, 0 deletions
diff --git a/cgit.h b/cgit.h
index bef6e5f..df42312 100644
--- a/cgit.h
+++ b/cgit.h
@@ -334,6 +334,7 @@ extern int chk_non_negative(int result, char *msg);
extern char *trim_end(const char *str, char c);
extern char *ensure_end(const char *str, char c);
extern char *strlpart(char *txt, int maxlen);
+extern char *strrpart(char *txt, int maxlen);
extern void strbuf_ensure_end(struct strbuf *sb, char c);
diff --git a/shared.c b/shared.c
index 8d08435..571fbba 100644
--- a/shared.c
+++ b/shared.c
@@ -158,6 +158,21 @@ char *strlpart(char *txt, int maxlen)
return result;
}
+char *strrpart(char *txt, int maxlen)
+{
+ char *result;
+
+ if (!txt)
+ return txt;
+
+ if (strlen(txt) <= maxlen)
+ return txt;
+ result = xmalloc(maxlen + 1);
+ memcpy(result + 3, txt + strlen(txt) - maxlen + 4, maxlen - 3);
+ result[0] = result[1] = result[2] = '.';
+ return result;
+}
+
void cgit_add_ref(struct reflist *list, struct refinfo *ref)
{
size_t size;