From e5888a1ffdae813d7575f5fb02275c6bb07e5199 Mon Sep 17 00:00:00 2001 From: Taru Karttunen Date: Wed, 30 Mar 2011 15:46:40 +0300 Subject: Import sources from 2011-03-30 iso image --- sys/src/cmd/unix/drawterm/kern/devlfd.c | 126 ++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 sys/src/cmd/unix/drawterm/kern/devlfd.c (limited to 'sys/src/cmd/unix/drawterm/kern/devlfd.c') diff --git a/sys/src/cmd/unix/drawterm/kern/devlfd.c b/sys/src/cmd/unix/drawterm/kern/devlfd.c new file mode 100755 index 000000000..7c61e0c1e --- /dev/null +++ b/sys/src/cmd/unix/drawterm/kern/devlfd.c @@ -0,0 +1,126 @@ +#include "u.h" +#include +#include "lib.h" +#include "dat.h" +#include "fns.h" +#include "error.h" + +#undef pread +#undef pwrite + +Chan* +lfdchan(int fd) +{ + Chan *c; + + c = newchan(); + c->type = devno('L', 0); + c->aux = (void*)(uintptr)fd; + c->name = newcname("fd"); + c->mode = ORDWR; + c->qid.type = 0; + c->qid.path = 0; + c->qid.vers = 0; + c->dev = 0; + c->offset = 0; + return c; +} + +int +lfdfd(int fd) +{ + return newfd(lfdchan(fd)); +} + +static Chan* +lfdattach(char *x) +{ + USED(x); + + error(Egreg); + return nil; +} + +static Walkqid* +lfdwalk(Chan *c, Chan *nc, char **name, int nname) +{ + USED(c); + USED(nc); + USED(name); + USED(nname); + + error(Egreg); + return nil; +} + +static int +lfdstat(Chan *c, uchar *dp, int n) +{ + USED(c); + USED(dp); + USED(n); + error(Egreg); + return -1; +} + +static Chan* +lfdopen(Chan *c, int omode) +{ + USED(c); + USED(omode); + + error(Egreg); + return nil; +} + +static void +lfdclose(Chan *c) +{ + close((int)(uintptr)c->aux); +} + +static long +lfdread(Chan *c, void *buf, long n, vlong off) +{ + USED(off); /* can't pread on pipes */ + n = read((int)(uintptr)c->aux, buf, n); + if(n < 0){ + iprint("error %d\n", errno); + oserror(); + } + return n; +} + +static long +lfdwrite(Chan *c, void *buf, long n, vlong off) +{ + USED(off); /* can't pread on pipes */ + + n = write((int)(uintptr)c->aux, buf, n); + if(n < 0){ + iprint("error %d\n", errno); + oserror(); + } + return n; +} + +Dev lfddevtab = { + 'L', + "lfd", + + devreset, + devinit, + devshutdown, + lfdattach, + lfdwalk, + lfdstat, + lfdopen, + devcreate, + lfdclose, + lfdread, + devbread, + lfdwrite, + devbwrite, + devremove, + devwstat, +}; -- cgit v1.2.3