about summary refs log tree commit diff
path: root/shared.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared.c')
-rw-r--r--shared.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/shared.c b/shared.c
index 50fe8e1..e06df91 100644
--- a/shared.c
+++ b/shared.c
@@ -303,6 +303,37 @@ char *trim_end(const char *str, char c)
 	return s;
 }
 
+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;
+}
+
+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;