vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit a8e8c3eb95deaeac267079b830067c129fe3f263 parent 9226e82939c9e425a96347f3ae159a655d063a5e Author: Marc André Tanner <mat@brain-dump.org> Date: Sat, 25 Oct 2014 15:23:45 +0200 Introduce text_range_size Diffstat:
| M | text.c | | | 9 | ++++++--- |
| M | text.h | | | 1 | + |
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/text.c b/text.c @@ -606,7 +606,7 @@ bool text_save(Text *txt, const char *filename) { bool text_range_save(Text *txt, Filerange *range, const char *filename) { int fd = -1; size_t bufsize = strlen(filename) + 10; - size_t size = range->end - range->start; + size_t size = text_range_size(range); char *tmpname = malloc(bufsize); if (!tmpname) return false; @@ -669,8 +669,7 @@ ssize_t text_write(Text *txt, int fd) { } ssize_t text_range_write(Text *txt, Filerange *range, int fd) { - size_t size = range->end - range->start; - size_t rem = size; + size_t size = text_range_size(range), rem = size; for (Iterator it = text_iterator_get(txt, range->start); rem > 0 && text_iterator_valid(&it); text_iterator_next(&it)) { @@ -1257,6 +1256,10 @@ bool text_range_valid(Filerange *r) { return r->start != EPOS && r->end != EPOS && r->start <= r->end; } +size_t text_range_size(Filerange *r) { + return text_range_valid(r) ? r-> end - r->start : 0; +} + Filerange text_range_empty(void) { return (Filerange){ .start = EPOS, .end = EPOS }; } diff --git a/text.h b/text.h @@ -13,6 +13,7 @@ typedef struct { } Filerange; bool text_range_valid(Filerange*); +size_t text_range_size(Filerange*); Filerange text_range_empty(void); Filerange text_range_union(Filerange*, Filerange*);