summaryrefslogtreecommitdiff
path: root/sys/src/libdraw/event.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-12-31 21:09:46 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-12-31 21:09:46 +0100
commit6cadd03bbeace1c256ba875c2e6a877f924877cd (patch)
tree8079ea6f6ccdb1c2cbb2b7813f618837617cb33e /sys/src/libdraw/event.c
parent6d99096136278f06f6333f927da34105a8dfe0bf (diff)
fix utf and rune handling in preparation for 32bit runes
Diffstat (limited to 'sys/src/libdraw/event.c')
-rw-r--r--sys/src/libdraw/event.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/src/libdraw/event.c b/sys/src/libdraw/event.c
index 1cf223c36..5f99199dd 100644
--- a/sys/src/libdraw/event.c
+++ b/sys/src/libdraw/event.c
@@ -199,7 +199,7 @@ static void
ekeyslave(int fd)
{
Rune r;
- char t[3], k[10];
+ char t[1+UTFmax], k[10];
int kr, kn, w;
if(eforkslave(Ekeyboard) < MAXSLAVE)
@@ -215,10 +215,9 @@ ekeyslave(int fd)
}
w = chartorune(&r, k);
kn -= w;
+ memmove(t+1, k, w);
memmove(k, &k[w], kn);
- t[1] = r;
- t[2] = r>>8;
- if(write(epipe[1], t, 3) != 3)
+ if(write(epipe[1], t, sizeof(t)) != sizeof(t))
break;
}
breakout:;
@@ -302,7 +301,7 @@ loop:
s->head = (Ebuf *)1;
return;
}
- if(i == Skeyboard && n != 3)
+ if(i == Skeyboard && n != (1+UTFmax))
drawerror(display, "events: protocol error: keyboard");
if(i == Smouse){
if(n < 1+1+2*12)
@@ -418,14 +417,13 @@ int
ekbd(void)
{
Ebuf *eb;
- int c;
+ Rune r;
if(Skeyboard < 0)
drawerror(display, "events: keyboard not initialzed");
eb = ebread(&eslave[Skeyboard]);
- c = eb->buf[0] + (eb->buf[1]<<8);
- free(eb);
- return c;
+ chartorune(&r, (char*)eb->buf);
+ return r;
}
void