Introduction
Introduction Statistics Contact Development Disclaimer Help
tfix and clean ttyread(). buf wasn't static. - st - [fork] customized build of …
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit af75c433e56e74d2ad7a315d504a9303ea532f18
parent 41a4497ecfa66c1dbc65202ae80542c18c5d7793
Author: AurĂ©lien Aptel <[email protected]>
Date: Sat, 27 Nov 2010 21:19:31 +0100
fix and clean ttyread(). buf wasn't static.
Diffstat:
M st.c | 34 ++++++++++++++++++-----------…
1 file changed, 20 insertions(+), 14 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -606,24 +606,31 @@ dump(char c) {
void
ttyread(void) {
- char buf[BUFSIZ], *ptr;
+ static char buf[BUFSIZ];
+ static int buflen = 0;
+ char *ptr;
char s[UTF_SIZ];
- int ret, br;
- static int buflen = 0;
- long u;
+ int charsize; /* size of utf8 char in bytes */
+ long utf8c;
+ int ret;
+ /* append read bytes to unprocessed bytes */
if((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
die("Couldn't read from shell: %s\n", SERRNO);
- else {
- buflen += ret;
- for(ptr=buf; buflen>=UTF_SIZ||isfullutf8(ptr,buflen); buflen-=…
- br = utf8decode(ptr, &u);
- utf8encode(&u, s);
- tputc(s);
- ptr += br;
- }
- memcpy(buf, ptr, buflen);
+
+ /* process every complete utf8 char */
+ buflen += ret;
+ ptr = buf;
+ while(buflen >= UTF_SIZ || isfullutf8(ptr,buflen)) {
+ charsize = utf8decode(ptr, &utf8c);
+ utf8encode(&utf8c, s);
+ tputc(s);
+ ptr += charsize;
+ buflen -= charsize;
}
+
+ /* keep any uncomplete utf8 char for the next call */
+ memcpy(buf, ptr, buflen);
}
void
t@@ -1774,7 +1781,6 @@ kpress(XEvent *ev) {
/* 3. X lookup */
default:
if(len > 0) {
- buf[sizeof(buf)-1] = '\0';
if(meta && len == 1)
ttywrite("\033", 1);
ttywrite(buf, len);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.