fix delwordcursor and do some extra checks - sob - simple output bar
 (HTM) git clone git://git.codemadness.org/sob
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2d13beded20b1db3647de8a233c1d5b2ae2b4053
 (DIR) parent a9ae8a05932a697db41b90346be70cdab1e6031d
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Fri, 10 Oct 2014 22:45:57 +0000
       
       fix delwordcursor and do some extra checks
       
       Diffstat:
         M sob.c                               |      18 +++++++++---------
       
       1 file changed, 9 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/sob.c b/sob.c
       @@ -100,10 +100,10 @@ static size_t
        colw(const char *s, size_t max)
        {
                size_t len = 0, i;
       -        wchar_t w = 0;
       +        wchar_t w;
                int r;
        
       -        for(i = 0; *s; s++, i++) {
       +        for(i = 0; *s && i < max; s++, i++) {
                        if((*s & 0xc0) != 0x80) {
                                if((r = mbtowc(&w, s, i + 4 > max ? max - i : 4)) == -1)
                                        break;
       @@ -412,7 +412,7 @@ line_deltoend(void)
        static void
        line_delwordcursor(void)
        {
       -        size_t len, siz, bs, be, us, ue;
       +        size_t bs, be, us, ue, siz, len;
        
                line_getwordpos(line.bytepos, line.utfpos, &bs, &be, &us, &ue);
        
       @@ -422,9 +422,9 @@ line_delwordcursor(void)
                memmove(&line.line[bs], &line.line[be], line.bytesiz - be);
        
                line.bytesiz -= siz;
       -        line.bytepos -= siz;
       +        line.bytepos = bs;
                line.line[line.bytesiz] = '\0';
       -        line.utfpos -= len;
       +        line.utfpos = us;
                line.utflen -= len;
                line.collen = colw(line.line, line.bytesiz);
                line.colpos = colw(line.line, bs);
       @@ -443,16 +443,16 @@ line_delwordprev(void)
                line_getwordposprev(line.bytepos, line.utfpos, &bs, &us);
        
                siz = line.bytepos - bs;
       +        len = line.utfpos - us;
                line.colpos -= colw(&line.line[bs], siz);
       +
                memmove(&line.line[bs], &line.line[line.bytepos],
                        line.bytesiz - line.bytepos);
        
       -        len = line.utfpos - us;
       -
                line.bytesiz -= siz;
       -        line.bytepos -= siz;
       +        line.bytepos = bs;
                line.line[line.bytesiz] = '\0';
       -        line.utfpos -= len;
       +        line.utfpos = us;
                line.utflen -= len;
                line.collen = colw(line.line, line.bytesiz);