X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=st.c;h=8ca310c92ebedb20d5f31f922d9e3f50c0d96733;hb=753fe862b14c7dd4b0449ab2c3bf22ecbb10030e;hp=0204b2e14d1d561f0bdfbf3e0007bdeec03de37f;hpb=89807ed453e27893dea5ac73ee2c6b4f8dd15afb;p=st.git diff --git a/st.c b/st.c index 0204b2e..8ca310c 100644 --- a/st.c +++ b/st.c @@ -459,7 +459,7 @@ static void mousereport(XEvent *); static size_t utf8decode(char *, long *, size_t); static long utf8decodebyte(char, size_t *); -static size_t utf8encode(long, char *, size_t); +static size_t utf8encode(long, char *); static char utf8encodebyte(long, size_t); static size_t utf8len(char *); static size_t utf8validate(long *, size_t); @@ -610,11 +610,11 @@ utf8decodebyte(char c, size_t *i) { } size_t -utf8encode(long u, char *c, size_t clen) { +utf8encode(long u, char *c) { size_t len, i; len = utf8validate(&u, 0); - if(clen < len) + if(len > UTF_SIZ) return 0; for(i = len - 1; i != 0; --i) { c[i] = utf8encodebyte(u, 0); @@ -1276,7 +1276,8 @@ stty(void) siz-= n + 1; } *q = '\0'; - system(cmd); + if (system(cmd) != 0) + perror("Couldn't call stty"); } void @@ -1350,7 +1351,7 @@ ttyread(void) { buflen += ret; ptr = buf; while((charsize = utf8decode(ptr, &unicodep, buflen))) { - utf8encode(unicodep, s, UTF_SIZ); + utf8encode(unicodep, s); tputc(s, charsize); ptr += charsize; buflen -= charsize; @@ -2268,8 +2269,7 @@ strhandle(void) { term.esc &= ~(ESC_STR_END|ESC_STR); strparse(); - narg = strescseq.narg; - par = atoi(strescseq.args[0]); + par = (narg = strescseq.narg) ? atoi(strescseq.args[0]) : 0; switch(strescseq.type) { case ']': /* OSC -- Operating System Command */ @@ -2927,7 +2927,7 @@ xloadcols(void) { Color *cp; if(loaded) { - for (cp = dc.col; cp < dc.col + LEN(dc.col); ++cp) + for (cp = dc.col; cp < &dc.col[LEN(dc.col)]; ++cp) XftColorFree(xw.dpy, xw.vis, xw.cmap, cp); } @@ -3672,7 +3672,6 @@ drawregion(int x1, int y1, int x2, int y2) { Glyph base, new; char buf[DRAW_BUF_SIZ]; bool ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN); - long unicodep; if(!(xw.state & WIN_VISIBLE)) return; @@ -3701,7 +3700,7 @@ drawregion(int x1, int y1, int x2, int y2) { base = new; } - sl = utf8decode(new.c, &unicodep, UTF_SIZ); + sl = utf8len(new.c); memcpy(buf+ib, new.c, sl); ib += sl; ic += (new.mode & ATTR_WIDE)? 2 : 1; @@ -3849,7 +3848,7 @@ kpress(XEvent *ev) { if(IS_SET(MODE_8BIT)) { if(*buf < 0177) { c = *buf | 0x80; - len = utf8encode(c, buf, UTF_SIZ); + len = utf8encode(c, buf); } } else { buf[1] = buf[0]; @@ -4066,7 +4065,7 @@ run: if(argc > 0) { /* eat all remaining arguments */ opt_cmd = argv; - if(!opt_title) + if(!opt_title && !opt_line) opt_title = basename(xstrdup(argv[0])); } setlocale(LC_CTYPE, "");