tlbuf: do not use an sbuf struct in lbuf_rd() - neatvi - [fork] simple vi-type editor with UTF-8 support
(HTM) git clone git://src.adamsgaard.dk/neatvi
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit d77ba570505085a2c006463b174d6fc6da62b3d5
(DIR) parent d45220ca72fc434031d68ec33a553de6ebf0262e
(HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
Date: Thu, 11 Jun 2015 15:42:25 +0430
lbuf: do not use an sbuf struct in lbuf_rd()
Diffstat:
M lbuf.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
---
(DIR) diff --git a/lbuf.c b/lbuf.c
t@@ -79,20 +79,17 @@ static void lbuf_insertline(struct lbuf *lb, int pos, char *s)
/* low-level insertion */
static void lbuf_insert(struct lbuf *lb, int pos, char *s)
{
- int len = strlen(s);
- struct sbuf *sb;
int lb_len = lbuf_len(lb);
int beg = pos, end;
+ char *r;
int i;
- sb = sbuf_make();
- for (i = 0; i < len; i++) {
- sbuf_chr(sb, (unsigned char) s[i]);
- if (s[i] == '\n') {
- lbuf_insertline(lb, pos++, sbuf_done(sb));
- sb = sbuf_make();
- }
+ while ((r = strchr(s, '\n'))) {
+ char *n = malloc(r - s + 2);
+ memcpy(n, s, r - s + 1);
+ n[r - s + 1] = '\0';
+ lbuf_insertline(lb, pos++, n);
+ s = r + 1;
}
- sbuf_free(sb);
for (i = 0; i < LEN(lb->mark); i++) /* updating marks */
if (lb->mark[i] >= pos)
lb->mark[i] += lbuf_len(lb) - lb_len;
t@@ -152,7 +149,7 @@ static void lbuf_opt(struct lbuf *lb, int ins, int beg, int end)
void lbuf_rd(struct lbuf *lbuf, int fd, int pos)
{
- char buf[1 << 8];
+ char buf[1 << 10];
struct sbuf *sb;
int nr;
sb = sbuf_make();