fix segfault when selecting big buffers - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 591d147af7d59f31a68513f613124d49f25f9859
 (DIR) parent 1132d9e2d65f469dedd9c5b6f356495c7a87b743
 (HTM) Author: pancake@nopcode.org <unknown>
       Date:   Tue, 31 Aug 2010 17:36:55 +0200
       
       fix segfault when selecting big buffers
       
       shift+insert paste clipboard
       honor CFLAGS and LDFLAGS in config.mk
       Diffstat:
         config.mk                           |       6 +++---
         st.c                                |      22 ++++++----------------
       
       2 files changed, 9 insertions(+), 19 deletions(-)
       ---
 (DIR) diff --git a/config.mk b/config.mk
       @@ -16,8 +16,8 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil
        
        # flags
        CPPFLAGS = -DVERSION=\"${VERSION}\"
       -CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
       -LDFLAGS = -s ${LIBS}
       +CFLAGS += -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
       +LDFLAGS += -s ${LIBS}
        
        # compiler and linker
       -CC = cc
       +CC ?= cc
 (DIR) diff --git a/st.c b/st.c
       @@ -249,19 +249,15 @@ static char *getseltext() {
                int ls, x, y, sz;
                if(sel.bx==-1)
                        return NULL;
       -        sz = ((xw.w/xw.ch) * (sel.e[1]-sel.b[1]+2));
       +        sz = ((term.col+1) * (sel.e[1]-sel.b[1]+1));
                ptr = str = malloc (sz);
                for(y = 0; y < term.row; y++) {
                        for(x = 0; x < term.col; x++) {
       -                        if(term.line[y][x].state & GLYPH_SET && (ls=selected(x, y))) {
       -                                *ptr = term.line[y][x].c;
       -                                ptr++;
       -                        }
       -                }
       -                if (ls) {
       -                        *ptr = '\n';
       -                        ptr++;
       +                        if(term.line[y][x].state & GLYPH_SET && (ls=selected(x, y)))
       +                                *ptr = term.line[y][x].c, ptr++;
                        }
       +                if (ls)
       +                        *ptr = '\n', ptr++;
                }
                *ptr = 0;
                return str;
       @@ -283,12 +279,6 @@ static void brelease(XEvent *e) {
                int b;
                sel.mode = 0;
                getbuttoninfo(e, &b, &sel.ex, &sel.ey);
       -        if(b==4)
       -                tscrollup(1);
       -        else
       -        if(b==5)
       -                tscrolldown(1);
       -        else
                if(sel.bx==sel.ex && sel.by==sel.ey) {
                        sel.bx = -1;
                        if(b==2)
       @@ -1411,7 +1401,7 @@ kpress(XEvent *ev) {
                                break;
                        case XK_Insert:
                                if(shift)
       -                                draw(1), puts("draw!")/* XXX: paste X clipboard */;
       +                                selpaste(), draw(1);
                                break;
                        default:
                                fprintf(stderr, "errkey: %d\n", (int)ksym);