summaryrefslogtreecommitdiff
path: root/emu/port/devtk.c
diff options
context:
space:
mode:
Diffstat (limited to 'emu/port/devtk.c')
-rw-r--r--emu/port/devtk.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/emu/port/devtk.c b/emu/port/devtk.c
index 6f31967b..a64f6dcb 100644
--- a/emu/port/devtk.c
+++ b/emu/port/devtk.c
@@ -4,8 +4,8 @@
#include <interp.h>
-#include "image.h"
-#include <memimage.h>
+#include "draw.h"
+#include <memdraw.h>
#include <memlayer.h>
#include <cursor.h>
@@ -15,7 +15,9 @@ enum{
};
static
-Dirtab tkdirtab[]={
+Dirtab tkdirtab[]=
+{
+ ".", {Qdir, 0, QTDIR}, 0, DMDIR|0555,
"tkevents", {Qtkevents, 0}, 0, 0600,
};
@@ -32,6 +34,9 @@ tkwiretapper(void *top, char *cmd, char *result, void *image, Rectangle *rp)
int n;
char *s, *e;
+//fprint(2, "wiretap %p %q %q\n", top, cmd, result);
+ if(tkevents.eq == nil)
+ return;
n = 12;
if(cmd != nil)
n += strlen(cmd)+2+1;
@@ -71,6 +76,9 @@ tkwiretapper(void *top, char *cmd, char *result, void *image, Rectangle *rp)
}
if(tkevents.eq != nil)
qbwrite(tkevents.eq, b);
+ else
+ freeb(b);
+ poperror();
qunlock(&tkevents.l);
acquire();
}
@@ -84,16 +92,16 @@ tkattach(char* spec)
return devattach(L'τ', spec);
}
-static int
-tkwalk(Chan* c, char* name)
+static Walkqid*
+tkwalk(Chan *c, Chan *nc, char **name, int nname)
{
- return devwalk(c, name, tkdirtab, nelem(tkdirtab), devgen);
+ return devwalk(c, nc, name, nname, tkdirtab, nelem(tkdirtab), devgen);
}
-static void
-tkstat(Chan* c, char* db)
+static int
+tkstat(Chan *c, uchar *db, int n)
{
- devstat(c, db, tkdirtab, nelem(tkdirtab), devgen);
+ return devstat(c, db, n, tkdirtab, nelem(tkdirtab), devgen);
}
static Chan*
@@ -134,9 +142,10 @@ static long
tkread(Chan* c, void* a, long n, vlong offset)
{
USED(offset);
- switch(c->qid.path & ~CHDIR){
- case Qdir:
+ if(c->qid.type & QTDIR)
return devdirread(c, a, n, tkdirtab, nelem(tkdirtab), devgen);
+
+ switch((ulong)c->qid.path){
case Qtkevents:
return qread(tkevents.eq, a, n);
default:
@@ -162,7 +171,6 @@ Dev tkdevtab = {
devinit,
tkattach,
// devdetach,
- devclone,
tkwalk,
tkstat,
tkopen,