aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--cgit.h1
-rw-r--r--shared.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/cgit.h b/cgit.h
index fbc6c6a..bef6e5f 100644
--- a/cgit.h
+++ b/cgit.h
@@ -333,6 +333,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 void strbuf_ensure_end(struct strbuf *sb, char c);
diff --git a/shared.c b/shared.c
index c63f1e3..8d08435 100644
--- a/shared.c
+++ b/shared.c
@@ -142,6 +142,22 @@ void strbuf_ensure_end(struct strbuf *sb, char c)
strbuf_addch(sb, c);
}
+char *strlpart(char *txt, int maxlen)
+{
+ char *result;
+
+ if (!txt)
+ return txt;
+
+ if (strlen(txt) <= maxlen)
+ return txt;
+ result = xmalloc(maxlen + 1);
+ memcpy(result, txt, maxlen - 3);
+ result[maxlen-1] = result[maxlen-2] = result[maxlen-3] = '.';
+ result[maxlen] = '\0';
+ return result;
+}
+
void cgit_add_ref(struct reflist *list, struct refinfo *ref)
{
size_t size;