diff options
Diffstat (limited to 'src/lib/string.c')
| -rw-r--r-- | src/lib/string.c | 24 |
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; +} |