fix and clean ttyread(). buf wasn't static.

master
Aurélien Aptel 14 years ago
parent 41a4497ecf
commit af75c433e5

28
st.c

@ -606,25 +606,32 @@ dump(char c) {
void void
ttyread(void) { ttyread(void) {
char buf[BUFSIZ], *ptr; static char buf[BUFSIZ];
char s[UTF_SIZ];
int ret, br;
static int buflen = 0; static int buflen = 0;
long u; char *ptr;
char s[UTF_SIZ];
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) if((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
die("Couldn't read from shell: %s\n", SERRNO); die("Couldn't read from shell: %s\n", SERRNO);
else {
/* process every complete utf8 char */
buflen += ret; buflen += ret;
for(ptr=buf; buflen>=UTF_SIZ||isfullutf8(ptr,buflen); buflen-=br) { ptr = buf;
br = utf8decode(ptr, &u); while(buflen >= UTF_SIZ || isfullutf8(ptr,buflen)) {
utf8encode(&u, s); charsize = utf8decode(ptr, &utf8c);
utf8encode(&utf8c, s);
tputc(s); tputc(s);
ptr += br; ptr += charsize;
buflen -= charsize;
} }
/* keep any uncomplete utf8 char for the next call */
memcpy(buf, ptr, buflen); memcpy(buf, ptr, buflen);
} }
}
void void
ttywrite(const char *s, size_t n) { ttywrite(const char *s, size_t n) {
@ -1774,7 +1781,6 @@ kpress(XEvent *ev) {
/* 3. X lookup */ /* 3. X lookup */
default: default:
if(len > 0) { if(len > 0) {
buf[sizeof(buf)-1] = '\0';
if(meta && len == 1) if(meta && len == 1)
ttywrite("\033", 1); ttywrite("\033", 1);
ttywrite(buf, len); ttywrite(buf, len);

Loading…
Cancel
Save