tlbuf: when the last line lacks eol, append it - 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 d2e6b8054daf567c687f0cb4b526b4a6f439d7d5
(DIR) parent 20cc8817475554d8448632970ff7c8d84ed2f9e2
(HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
Date: Mon, 6 Jun 2016 23:40:14 +0430
lbuf: when the last line lacks eol, append it
Diffstat:
M lbuf.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
---
(DIR) diff --git a/lbuf.c b/lbuf.c
t@@ -133,7 +133,7 @@ static void lbuf_insertline(struct lbuf *lb, int pos, char *s)
/* low-level replacement */
static void lbuf_replace(struct lbuf *lb, char *s, int pos, int n_del)
{
- char *r;
+ char *r, *n;
int n_ins = 0;
int i;
for (i = 0; i < n_del; i++)
t@@ -141,12 +141,16 @@ static void lbuf_replace(struct lbuf *lb, char *s, int pos, int n_del)
memmove(lb->ln + pos, lb->ln + pos + n_del,
(lb->ln_n - pos - n_del) * sizeof(lb->ln[0]));
lb->ln_n -= n_del;
- while (s && (r = strchr(s, '\n'))) {
- char *n = malloc(r - s + 2);
- memcpy(n, s, r - s + 1);
+ while (s && *s) {
+ r = strchr(s, '\n');
+ if (!r) /* no eol */
+ r = strchr(s, '\0');
+ n = malloc(r - s + 2);
+ memcpy(n, s, r - s);
+ n[r - s + 0] = '\n';
n[r - s + 1] = '\0';
lbuf_insertline(lb, pos + n_ins++, n);
- s = r + 1;
+ s = *r ? r + 1 : r;
}
for (i = 0; i < LEN(lb->mark); i++) { /* updating marks */
if (!s && lb->mark[i] >= pos && lb->mark[i] < pos + n_del)