summaryrefslogtreecommitdiff
path: root/src/lib/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/string.c')
-rw-r--r--src/lib/string.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/string.c b/src/lib/string.c
index 05549e0..db08b28 100644
--- a/src/lib/string.c
+++ b/src/lib/string.c
@@ -168,3 +168,27 @@ string_compare(struct string *a, struct string *b)
else
return 0;
}
+
+struct string *
+substring(struct aplwc *aplwc, struct string *s, size_t start, size_t length)
+{
+ size_t bytes, i;
+ struct string *r;
+
+ MEMPTRS(aplwc, 1);
+ MEMPTR(0, s);
+
+ bytes = 0;
+ for(i = 0; i < length; i++)
+ bytes += char_length(s, start+i);
+
+ r = memory_alloc_string(aplwc, bytes);
+ if(r){
+ r->bytes = bytes;
+ r->chars = length;
+ memcpy(r->utf8, s->utf8+start, bytes);
+ }
+
+ MEMPTRS_EXIT(aplwc);
+ return r;
+}