From b89606ecb8d2ef58269e4c794b940801a19f3920 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 19 Mar 1998 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1998-03-19 --- carrera/devether.c | 5 +++-- carrera/devrtc.c | 10 +++++----- ip/devip.c | 5 +++-- ip/kernel.h | 2 +- ip/kio.c | 7 ++++--- pc/devastar.c | 12 +++++++----- pc/devata.c | 6 ++++-- pc/devether.c | 5 +++-- pc/devfloppy.c | 18 ++++++++---------- pc/devi82365.c | 24 ++++++++++-------------- pc/devlpt.c | 21 +++++++++++---------- pc/devrtc.c | 6 ++++-- pc/devvga.c | 6 ++++-- pc/ether8390.c | 6 +----- pc/etherelnk3.c | 2 +- pc/screen.h | 25 +++++++++++++++---------- pc/u.h | 6 ++---- port/dev.c | 4 ++-- port/devaudio.c | 5 +++-- port/devcons.c | 6 ++++-- port/devdraw.c | 6 ++++-- port/devdup.c | 4 ++-- port/devenv.c | 6 ++++-- port/devkprof.c | 5 +++-- port/devmnt.c | 7 +++++-- port/devmouse.c | 5 +++-- port/devns16552.c | 5 +++-- port/devpipe.c | 4 ++-- port/devproc.c | 6 ++++-- port/devroot.c | 5 +++-- port/devsd.c | 7 +++++-- port/devsrv.c | 4 ++-- port/devssl.c | 6 ++++-- port/portdat.h | 6 +++--- port/sysfile.c | 40 ++++++++++++++++++++++++++++++++-------- port/systab.h | 4 +++- 36 files changed, 177 insertions(+), 124 deletions(-) diff --git a/carrera/devether.c b/carrera/devether.c index 7eb844acb577cb186641f56553754da52e8e1985..2030c7cc6987eff56468ea23215b31fc84e2720b 100644 --- a/carrera/devether.c +++ b/carrera/devether.c @@ -65,9 +65,10 @@ etherclose(Chan* chan) } static long -etherread(Chan* chan, void* buf, long n, ulong offset) +etherread(Chan* chan, void* buf, long n, vlong off) { Ether *ether; + ulong offset = off; ether = etherxx[chan->dev]; if((chan->qid.path & CHDIR) == 0 && ether->dev && ether->dev->ifstat){ @@ -231,7 +232,7 @@ etheroq(Ether* ether, Block* bp) } static long -etherwrite(Chan* chan, void* buf, long n, ulong) +etherwrite(Chan* chan, void* buf, long n, vlong) { Ether *ether; Block *bp; diff --git a/carrera/devrtc.c b/carrera/devrtc.c index 60666f648565988846c5a1f8a5b4783d739fa627..4fc429c5d2a2ef21b091c44cb39154e401bfba4f 100644 --- a/carrera/devrtc.c +++ b/carrera/devrtc.c @@ -112,9 +112,8 @@ rtcopen(Chan *c, int omode) } static void -rtcclose(Chan *c) +rtcclose(Chan*) { - USED(c); } static long @@ -200,9 +199,10 @@ rtctime(void) } static long -rtcread(Chan *c, void *buf, long n, ulong offset) +rtcread(Chan *c, void *buf, long n, vlong off) { uchar *f, *to, *e; + ulong offset = off; if(c->qid.path & CHDIR) return devdirread(c, buf, n, rtcdir, nelem(rtcdir), devgen); @@ -227,15 +227,15 @@ rtcread(Chan *c, void *buf, long n, ulong offset) } static long -rtcwrite(Chan *c, void *buf, long n, ulong offset) +rtcwrite(Chan *c, void *buf, long n, vlong off) { Rtc rtc; ulong secs; char *cp, *ep; uchar *f, *t, *e; uchar x; + ulong offset = off; - USED(c); switch(c->qid.path){ case Qrtc: /* diff --git a/ip/devip.c b/ip/devip.c index 65efca548c780d229af2055fc6e589979cb6ca43..ad78b62ea28b19f146afb41b4c00836701a8cbe4 100644 --- a/ip/devip.c +++ b/ip/devip.c @@ -509,13 +509,14 @@ enum }; static long -ipread(Chan *ch, void *a, long n, ulong offset) +ipread(Chan *ch, void *a, long n, vlong off) { Conv *c; Proto *x; char *buf, *p; long m, rv; Fs *f; + ulong offset = off; f = ipfs[ch->dev]; @@ -839,7 +840,7 @@ ttlctlmsg(Conv *c, Cmdbuf *cb) } static long -ipwrite(Chan* ch, char* a, long n, ulong) +ipwrite(Chan* ch, char* a, long n, vlong) { Conv *c; Proto *x; diff --git a/ip/kernel.h b/ip/kernel.h index 206f391f2e79a50ef78df3ddbc39be18a309bfe0..82e3cbfb3e49a2585cae04a3982cc018335622e0 100644 --- a/ip/kernel.h +++ b/ip/kernel.h @@ -4,7 +4,7 @@ extern void kerrstr(char*); extern void kgerrstr(char*); extern long kopen(char*, int); extern long kread(int, void*, long); -extern long kseek(int, int, int); +extern long kseek(int, vlong, int); extern long kwrite(int, void*, long); extern void kwerrstr(char *, ...); diff --git a/ip/kio.c b/ip/kio.c index 3c958be89637add0e070157552c5ea007d927847..af69505a204e1d9867dbd8bcbabc598ba57bfc3a 100644 --- a/ip/kio.c +++ b/ip/kio.c @@ -88,7 +88,7 @@ kread(int fd, void *va, long n) } long -kseek(int fd, int offset, int whence) +kseek(int fd, vlong offset, int whence) { Chan *c; char buf[DIRLEN]; @@ -112,7 +112,8 @@ kseek(int fd, int offset, int whence) off = 0; switch(whence) { case 0: - off = c->offset = offset; + off = offset; + c->offset = offset; break; case 1: lock(c); /* lock for read/write update */ @@ -123,7 +124,7 @@ kseek(int fd, int offset, int whence) case 2: devtab[c->type]->stat(c, buf); convM2D(buf, &dir); - c->offset = dir.length + offset; + c->offset = dir.length2 + offset; /* BOTCH */ off = c->offset; break; } diff --git a/pc/devastar.c b/pc/devastar.c index 427632cc7f72537470bfdf79ba978924a3980db7..3b0f426d1b62459bb4012dccbe46a2b087dc55e9 100644 --- a/pc/devastar.c +++ b/pc/devastar.c @@ -334,14 +334,13 @@ setpage(Astar *a, ulong offset) * generate the astar directory entries */ static int -astargen(Chan *c, Dirtab *tab, int ntab, int i, Dir *db) +astargen(Chan *c, Dirtab *, int , int i, Dir *db) { int dev, sofar, ch, t; extern ulong kerndate; memset(db, 0, sizeof(Dir)); - USED(tab, ntab); sofar = 0; for(dev = 0; dev < nastar; dev++){ @@ -349,7 +348,8 @@ astargen(Chan *c, Dirtab *tab, int ntab, int i, Dir *db) sprint(db->name, "astar%dmem", astar[dev]->id); db->qid.path = QID(dev, 0, Qmem); db->mode = 0660; - db->length = astar[dev]->memsize; + db->length1 = astar[dev]->memsize; /* BOTCH */ + db->length2 = astar[dev]->memsize; /* BOTCH */ break; } sofar++; @@ -779,10 +779,11 @@ statread(Astarchan *ac, void *buf, long n, ulong offset) } static long -astarread(Chan *c, void *buf, long n, ulong offset) +astarread(Chan *c, void *buf, long n, vlong off) { Astar *a; Astarchan *ac; + ulong offset = off; if(c->qid.path & CHDIR) return devdirread(c, buf, n, 0, 0, astargen); @@ -1382,11 +1383,12 @@ astarctl(Astarchan *ac, char *cmd) } static long -astarwrite(Chan *c, void *buf, long n, ulong offset) +astarwrite(Chan *c, void *buf, long n, vlong off) { Astar *a; Astarchan *ac; char cmsg[32]; + ulong offset = off; if(c->qid.path & CHDIR) error(Eperm); diff --git a/pc/devata.c b/pc/devata.c index b672da82714441ca79a9cc1d42435186721a05cd..78a7817bcc8d0c01580685ebe7eedc4bbf8932d5 100644 --- a/pc/devata.c +++ b/pc/devata.c @@ -634,7 +634,7 @@ ataclose(Chan* c) } static long -ataread(Chan* c, void* a, long n, ulong offset) +ataread(Chan* c, void* a, long n, vlong off) { Drive *dp; long rv, i; @@ -642,6 +642,7 @@ ataread(Chan* c, void* a, long n, ulong offset) uchar *aa = a; Partition *pp; uchar *buf; + ulong offset = off; if(c->qid.path == CHDIR) return devdirread(c, a, n, 0, 0, atagen); @@ -688,13 +689,14 @@ ataread(Chan* c, void* a, long n, ulong offset) } static long -atawrite(Chan *c, void *a, long n, ulong offset) +atawrite(Chan *c, void *a, long n, vlong off) { Drive *dp; long rv, i, partial; uchar *aa = a; Partition *pp; uchar *buf; + ulong offset = off; if(c->qid.path == CHDIR) error(Eisdir); diff --git a/pc/devether.c b/pc/devether.c index 6a8ac012bf9a14d7001688eb494a017458099e5a..c620d530b2417d09127074583a48fb3bcca96862 100644 --- a/pc/devether.c +++ b/pc/devether.c @@ -65,9 +65,10 @@ etherclose(Chan* chan) } static long -etherread(Chan* chan, void* buf, long n, ulong offset) +etherread(Chan* chan, void* buf, long n, vlong off) { Ether *ether; + ulong offset = off; ether = etherxx[chan->dev]; if((chan->qid.path & CHDIR) == 0 && ether->ifstat){ @@ -225,7 +226,7 @@ etheroq(Ether* ether, Block* bp) } static long -etherwrite(Chan* chan, void* buf, long n, ulong) +etherwrite(Chan* chan, void* buf, long n, vlong) { Ether *ether; Block *bp; diff --git a/pc/devfloppy.c b/pc/devfloppy.c index 81f01bf1e3c4bf6552cb1e09fc198f4dc6d5a4ca..c2e01ed684878a7b4ecda2b29c08b16fe46094ac 100644 --- a/pc/devfloppy.c +++ b/pc/devfloppy.c @@ -230,9 +230,8 @@ floppyopen(Chan *c, int omode) } static void -floppyclose(Chan *c) +floppyclose(Chan *) { - USED(c); } static void @@ -319,13 +318,14 @@ readtrack(FDrive *dp, int cyl, int head) } static long -floppyread(Chan *c, void *a, long n, ulong offset) +floppyread(Chan *c, void *a, long n, vlong off) { FDrive *dp; long rv; int sec, head, cyl; long len; uchar *aa; + ulong offset = off; if(c->qid.path == CHDIR) return devdirread(c, a, n, floppydir, fl.ndrive*NFDIR, devgen); @@ -373,12 +373,13 @@ floppyread(Chan *c, void *a, long n, ulong offset) #define SNCMP(a, b) strncmp(a, b, sizeof(b)-1) static long -floppywrite(Chan *c, void *a, long n, ulong offset) +floppywrite(Chan *c, void *a, long n, vlong off) { FDrive *dp; long rv, i; char *aa = a; char ctlmsg[64]; + ulong offset = off; rv = 0; dp = &fl.d[c->qid.path & ~Qmask]; @@ -438,11 +439,10 @@ floppywrite(Chan *c, void *a, long n, ulong offset) } static void -floppykproc(void *a) +floppykproc(void *) { FDrive *dp; - USED(a); while(waserror()) ; for(;;){ @@ -622,9 +622,8 @@ floppysense(void) } static int -cmddone(void *a) +cmddone(void *) { - USED(a); return fl.ncmd == 0; } @@ -982,9 +981,8 @@ floppyformat(FDrive *dp, char *params) } static void -floppyintr(Ureg *ur) +floppyintr(Ureg *) { - USED(ur); switch(fl.cmd[0]&~Fmulti){ case Fread: case Fwrite: diff --git a/pc/devi82365.c b/pc/devi82365.c index 902ada91e4e793cf1eac5835453790fab23f9277..96911e943a94f95050f3a3a0388f75dc46f72a5b 100644 --- a/pc/devi82365.c +++ b/pc/devi82365.c @@ -278,12 +278,11 @@ slotdis(Slot *pp) * status change interrupt */ static void -i82365intr(Ureg *ur, void *a) +i82365intr(Ureg *, void *) { uchar csc, was; Slot *pp; - USED(ur,a); if(slot == 0) return; @@ -469,7 +468,7 @@ enum #define QID(s,t) (((s)<<8)|(t)) static int -pcmgen(Chan *c, Dirtab *tab, int ntab, int i, Dir *dp) +pcmgen(Chan *c, Dirtab *, int , int i, Dir *dp) { int slotno; Qid qid; @@ -477,8 +476,7 @@ pcmgen(Chan *c, Dirtab *tab, int ntab, int i, Dir *dp) Slot *pp; char name[NAMELEN]; - USED(tab, ntab); - if(i>=3*nslot) + if(i >= 3*nslot) return -1; slotno = i/3; pp = slot + slotno; @@ -755,11 +753,12 @@ pcmread(int slotno, int attr, void *a, long n, ulong offset) } static long -i82365read(Chan *c, void *a, long n, ulong offset) +i82365read(Chan *c, void *a, long n, vlong off) { char *p; int len; Slot *pp; + ulong offset = off; switch(TYPE(c)){ case Qdir: @@ -836,10 +835,11 @@ pcmwrite(int dev, int attr, void *a, long n, ulong offset) } static long -i82365write(Chan *c, void *a, long n, ulong offset) +i82365write(Chan *c, void *a, long n, vlong off) { Slot *pp; char buf[32]; + ulong offset = off; switch(TYPE(c)){ case Qctl: @@ -1086,12 +1086,11 @@ getlong(Slot *pp, int size) } static void -tcfig(Slot *pp, int ttype) +tcfig(Slot *pp, int ) { uchar size, rasize, rmsize; uchar last; - USED(ttype); if(readc(pp, &size) != 1) return; rasize = (size&0x3) + 1; @@ -1279,13 +1278,11 @@ memspace(Slot *pp, int asize, int lsize, int host) } static void -tentry(Slot *pp, int ttype) +tentry(Slot *pp, int ) { uchar c, i, feature; Conftab *ct; - USED(ttype); - if(pp->nctab >= Maxctab) return; if(readc(pp, &c) != 1) @@ -1352,12 +1349,11 @@ tentry(Slot *pp, int ttype) } static void -tvers1(Slot *pp, int ttype) +tvers1(Slot *pp, int ) { uchar c, major, minor; int i; - USED(ttype); if(readc(pp, &major) != 1) return; if(readc(pp, &minor) != 1) diff --git a/pc/devlpt.c b/pc/devlpt.c index fd668053a66dfd92686ef739534b4476711e89d2..ccf9134dcea1868522ef1caf5f0ef3a58256339c 100644 --- a/pc/devlpt.c +++ b/pc/devlpt.c @@ -108,29 +108,31 @@ lptopen(Chan *c, int omode) } static void -lptclose(Chan *c) +lptclose(Chan *) { - USED(c); } static long -lptread(Chan *c, void *a, long n, ulong) +lptread(Chan *c, void *a, long n, vlong) { - char str[16]; int size; + char str[16]; + int size; + ulong o; if(c->qid.path == CHDIR) return devdirread(c, a, n, lptdir, nelem(lptdir), lptgen); size = sprint(str, "0x%2.2ux\n", inb(c->qid.path)); - if(c->offset >= size) + o = c->offset; + if(o >= size) return 0; - if(c->offset+n > size) + if(o+n > size) n = size-c->offset; - memmove(a, str+c->offset, n); + memmove(a, str+o, n); return n; } static long -lptwrite(Chan *c, void *a, long n, ulong) +lptwrite(Chan *c, void *a, long n, vlong) { char str[16], *p; long base, k; @@ -186,9 +188,8 @@ lptready(void *base) } static void -lptintr(Ureg *ur, void *arg) +lptintr(Ureg *, void *) { - USED(ur, arg); wakeup(&lptrendez); } diff --git a/pc/devrtc.c b/pc/devrtc.c index af3929321fe0354cfa877ae8146ce7000d861166..5ea04de38db0c7aaded61dcf86b552e68677e0d9 100644 --- a/pc/devrtc.c +++ b/pc/devrtc.c @@ -166,10 +166,11 @@ rtctime(void) } static long -rtcread(Chan* c, void* buf, long n, ulong offset) +rtcread(Chan* c, void* buf, long n, vlong off) { ulong t; char *a; + ulong offset = off; if(c->qid.path & CHDIR) return devdirread(c, buf, n, rtcdir, nelem(rtcdir), devgen); @@ -205,7 +206,7 @@ rtcread(Chan* c, void* buf, long n, ulong offset) #define PUTBCD(n,o) bcdclock[o] = (n % 10) | (((n / 10) % 10)<<4) static long -rtcwrite(Chan* c, void* buf, long n, ulong offset) +rtcwrite(Chan* c, void* buf, long n, vlong off) { int t; char *a; @@ -213,6 +214,7 @@ rtcwrite(Chan* c, void* buf, long n, ulong offset) ulong secs; uchar bcdclock[Nbcd]; char *cp, *ep; + ulong offset = off; if(offset!=0) error(Ebadarg); diff --git a/pc/devvga.c b/pc/devvga.c index 0f7b3b158f0c2452d5c495521df6d838d5bf0c1d..79e02172812e03652fec91cbce9bccb9cd75a8c8 100644 --- a/pc/devvga.c +++ b/pc/devvga.c @@ -65,13 +65,14 @@ vgaclose(Chan*) } static long -vgaread(Chan* c, void* a, long n, ulong offset) +vgaread(Chan* c, void* a, long n, vlong off) { int len, port; char *p, *s; ushort *sp; ulong *lp; VGAscr *scr; + ulong offset = off; switch(c->qid.path & ~CHDIR){ @@ -246,12 +247,13 @@ vgactl(char* a) } static long -vgawrite(Chan* c, void* a, long n, ulong offset) +vgawrite(Chan* c, void* a, long n, vlong off) { int port; char *p; ushort *sp; ulong *lp; + ulong offset = off; switch(c->qid.path & ~CHDIR){ diff --git a/pc/ether8390.c b/pc/ether8390.c index fdd6166e080731d47034578094367e97bfbd080e..1b824e1f9dc71f23a74e6c4f374fb98428ae7307 100644 --- a/pc/ether8390.c +++ b/pc/ether8390.c @@ -633,13 +633,11 @@ setfilter(Ether *ether, Dp8390 *ctlr) } static void -promiscuous(void *arg, int on) +promiscuous(void *arg, int ) { Ether *ether; Dp8390 *ctlr; - USED(on); - ether = arg; ctlr = ether->ctlr; @@ -676,8 +674,6 @@ multicast(void* arg, uchar *addr, int on) int i; ulong h; - USED(on); - ether = arg; ctlr = ether->ctlr; if(reverse[1] == 0){ diff --git a/pc/etherelnk3.c b/pc/etherelnk3.c index 2e37f02736699d8a15156c0acc755603ada401b4..9a2f7591e5d32793cf067061569884d2bb90b268 100644 --- a/pc/etherelnk3.c +++ b/pc/etherelnk3.c @@ -1411,7 +1411,7 @@ static struct xxx { #endif /* notdef */ static int -autoselect(int port, int xcvr, int is9) +autoselect(int port, int , int is9) { int media, x; diff --git a/pc/screen.h b/pc/screen.h index 9b85bde6a2a53f39252fa2c01bb0932945f14ad8..6f8c750989d8862fc5129da68b6f8043e52fb77e 100644 --- a/pc/screen.h +++ b/pc/screen.h @@ -14,16 +14,6 @@ extern int mouseputc(void*, int); extern int mouseswap; extern Cursorinfo cursor; - -/* mouse.c */ -extern void mousectl(char*); - -/* screen.c */ -extern void flushmemscreen(Rectangle); -extern int cursoron(int); -extern void cursoroff(int); -extern void setcursor(Cursor*); - extern Cursor arrow; /* @@ -114,3 +104,18 @@ extern VGAscr vgascreen[]; enum { Backgnd = Pwhite, }; + +/* mouse.c */ +extern void mousectl(char*); + +/* screen.c */ +extern void flushmemscreen(Rectangle); +extern int cursoron(int); +extern void cursoroff(int); +extern void setcursor(Cursor*); +extern int screensize(int, int, int); +extern int screenaperture(int, int); + +/* vga.c */ +extern void vgascreenwin(VGAscr*); + diff --git a/pc/u.h b/pc/u.h index 6942b9797239e8d179f07d57aeb9655564795dea..efa4e95d6594f051ce87b5b9041659bf8514b198 100644 --- a/pc/u.h +++ b/pc/u.h @@ -10,11 +10,9 @@ typedef ushort Rune; union Length { - char clength[8]; - vlong vlength; struct{ - long hlength; - long length; + long length1; + long length2; }; }; diff --git a/port/dev.c b/port/dev.c index 97c83370436bdb41d8c74ba0eaa706be9174319e..9db4ee28bd36e4c8ba7e7c74a3b140a3c43cc3b7 100644 --- a/port/dev.c +++ b/port/dev.c @@ -37,8 +37,8 @@ devdir(Chan *c, Qid qid, char *n, long length, char *user, long perm, Dir *db) db->mode |= CHMOUNT; db->atime = seconds(); db->mtime = kerndate; - db->hlength = 0; - db->length = length; + db->length1 = length; /* BOTCH */ + db->length2 = length; /* BOTCH */ memmove(db->uid, user, NAMELEN); memmove(db->gid, eve, NAMELEN); } diff --git a/port/devaudio.c b/port/devaudio.c index 7bfdcf8f31d61503cbe52d90abbb8b6c628ed3e1..2bc314e4860c47545e50d4f98f2549b0fc878be4 100644 --- a/port/devaudio.c +++ b/port/devaudio.c @@ -895,13 +895,14 @@ audioclose(Chan *c) } static long -audioread(Chan *c, char *a, long n, ulong offset) +audioread(Chan *c, char *a, long n, vlong off) { int liv, riv, lov, rov; long m, n0; char buf[300]; Buf *b; int j; + ulong offset = off; n0 = n; switch(c->qid.path & ~CHDIR) { @@ -989,7 +990,7 @@ audioread(Chan *c, char *a, long n, ulong offset) } static long -audiowrite(Chan *c, char *a, long n, ulong) +audiowrite(Chan *c, char *a, long n, vlong) { long m, n0; int i, nf, v, left, right, in, out; diff --git a/port/devcons.c b/port/devcons.c index f2fc584f57e8bc890c52435915f59421a444ca8f..2fab72921e8a574d0a811a4a09c8e95e20bcaf66 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -490,7 +490,7 @@ consclose(Chan *c) } static long -consread(Chan *c, void *buf, long n, ulong offset) +consread(Chan *c, void *buf, long n, vlong off) { ulong l; Mach *mp; @@ -498,6 +498,7 @@ consread(Chan *c, void *buf, long n, ulong offset) char tmp[128]; /* must be >= 6*NUMSIZE */ char *cbuf = buf; int ch, i, k, id, eol; + ulong offset = off; if(n <= 0) return n; @@ -689,7 +690,7 @@ consread(Chan *c, void *buf, long n, ulong offset) } static long -conswrite(Chan *c, void *va, long n, ulong offset) +conswrite(Chan *c, void *va, long n, vlong off) { char cbuf[64]; char buf[256]; @@ -698,6 +699,7 @@ conswrite(Chan *c, void *va, long n, ulong offset) Mach *mp; int id, fd; Chan *swc; + ulong offset = off; switch(c->qid.path){ case Qcons: diff --git a/port/devdraw.c b/port/devdraw.c index f32a6cc69750463086ead748f4ea927845d505aa..348cf4b78cc466682682320434edbb0c1d4909f0 100644 --- a/port/devdraw.c +++ b/port/devdraw.c @@ -938,7 +938,7 @@ drawclose(Chan *c) } long -drawread(Chan *c, void *a, long n, ulong offset) +drawread(Chan *c, void *a, long n, vlong off) { int index, m; ulong red, green, blue; @@ -947,6 +947,7 @@ drawread(Chan *c, void *a, long n, ulong offset) Refresh *r; DImage *di; Memimage *i; + ulong offset = off; USED(offset); if(c->qid.path & CHDIR) @@ -1053,11 +1054,12 @@ drawwakeall(void) } static long -drawwrite(Chan *c, void *a, long n, ulong offset) +drawwrite(Chan *c, void *a, long n, vlong off) { char buf[128], *fields[4], *q; Client *cl; int i, m, red, green, blue, x; + ulong offset = off; USED(offset); if(c->qid.path & CHDIR) diff --git a/port/devdup.c b/port/devdup.c index 658e4753761a6b60f0da18cd902102c5e73d7c80..ceded0a73d18598e36ebb2608356cdd42398d9dd 100644 --- a/port/devdup.c +++ b/port/devdup.c @@ -68,7 +68,7 @@ dupclose(Chan*) } static long -dupread(Chan *c, void *va, long n, ulong) +dupread(Chan *c, void *va, long n, vlong) { char *a = va; @@ -78,7 +78,7 @@ dupread(Chan *c, void *va, long n, ulong) } static long -dupwrite(Chan*, void*, long, ulong) +dupwrite(Chan*, void*, long, vlong) { panic("dupwrite"); return 0; /* not reached */ diff --git a/port/devenv.c b/port/devenv.c index 3ee2f56ed1fe51d1b8d8b7e7b576ec9c09ded620..adad27703b557ac87c04a48e4f13e7245ababc88 100644 --- a/port/devenv.c +++ b/port/devenv.c @@ -162,10 +162,11 @@ envclose(Chan*) } static long -envread(Chan *c, void *a, long n, ulong offset) +envread(Chan *c, void *a, long n, vlong off) { Egrp *eg; Evalue *e; + ulong offset = off; if(c->qid.path & CHDIR) return devdirread(c, a, n, 0, 0, envgen); @@ -192,12 +193,13 @@ envread(Chan *c, void *a, long n, ulong offset) } static long -envwrite(Chan *c, void *a, long n, ulong offset) +envwrite(Chan *c, void *a, long n, vlong off) { char *s; int vend; Egrp *eg; Evalue *e; + ulong offset = off; if(n <= 0) return 0; diff --git a/port/devkprof.c b/port/devkprof.c index c44c0a2311591fff606b99ab30f7b11ff12b81c6..f49719be9213b2e25916834a14b57ba620ce1e5c 100644 --- a/port/devkprof.c +++ b/port/devkprof.c @@ -109,11 +109,12 @@ kprofclose(Chan*) } static long -kprofread(Chan *c, void *va, long n, ulong offset) +kprofread(Chan *c, void *va, long n, vlong off) { ulong end; ulong w, *bp; uchar *a, *ea; + ulong offset = off; switch(c->qid.path & ~CHDIR){ case Kprofdirqid: @@ -150,7 +151,7 @@ kprofread(Chan *c, void *va, long n, ulong offset) } static long -kprofwrite(Chan *c, char *a, long n, ulong) +kprofwrite(Chan *c, char *a, long n, vlong) { switch((int)(c->qid.path&~CHDIR)){ case Kprofctlqid: diff --git a/port/devmnt.c b/port/devmnt.c index 94d9811e25ab0dff53493ef65f6ad1412d3bf99f..5d63ed93869673ea8e5fb87657f1bd5ca3d72502 100644 --- a/port/devmnt.c +++ b/port/devmnt.c @@ -481,10 +481,11 @@ mntread9p(Chan *c, void *buf, long n, ulong offset) } static long -mntread(Chan *c, void *buf, long n, ulong offset) +mntread(Chan *c, void *buf, long n, vlong off) { uchar *p, *e; int nc, cache, isdir; + ulong offset = off; isdir = 0; cache = c->flag & CCACHE; @@ -524,8 +525,10 @@ mntwrite9p(Chan *c, void *buf, long n, ulong offset) } static long -mntwrite(Chan *c, void *buf, long n, ulong offset) +mntwrite(Chan *c, void *buf, long n, vlong off) { + ulong offset = off; + return mntrdwr(Twrite, c, buf, n, offset); } diff --git a/port/devmouse.c b/port/devmouse.c index 47319dea3c8fdbca1991e67df06556cc736a1361..438fab6ad8ad88088306b2f91991aebf04964572 100644 --- a/port/devmouse.c +++ b/port/devmouse.c @@ -159,11 +159,12 @@ mouseclose(Chan *c) static long -mouseread(Chan *c, void *va, long n, ulong offset) +mouseread(Chan *c, void *va, long n, vlong off) { char buf[4*12+1]; uchar *p; static int map[8] = {0, 4, 2, 6, 1, 5, 3, 7 }; + ulong offset = off; p = va; switch(c->qid.path){ @@ -206,7 +207,7 @@ mouseread(Chan *c, void *va, long n, ulong offset) } static long -mousewrite(Chan *c, void *va, long n, ulong) +mousewrite(Chan *c, void *va, long n, vlong) { char *p; Point pt; diff --git a/port/devns16552.c b/port/devns16552.c index e228d4652bc9e76cf30c0ab3ab791f56d011adbd..3f42c4422c2e64829e4a71a9423cfd67dd1eb71b 100644 --- a/port/devns16552.c +++ b/port/devns16552.c @@ -808,9 +808,10 @@ for(j = 0; j < 8; j++) i+=sprint(str+i, " %ux", uartrdreg(p, j)); } static long -ns16552read(Chan *c, void *buf, long n, ulong offset) +ns16552read(Chan *c, void *buf, long n, vlong off) { Uart *p; + ulong offset = off; if(c->qid.path & CHDIR){ setlength(-1); @@ -907,7 +908,7 @@ ns16552ctl(Uart *p, char *cmd) } static long -ns16552write(Chan *c, void *buf, long n, ulong) +ns16552write(Chan *c, void *buf, long n, vlong) { Uart *p; char cmd[32]; diff --git a/port/devpipe.c b/port/devpipe.c index 19c81f62d241cda0113b0e703d31c948b72223af..41a344761e19139b5f3bbbd4b8c9bc58b9ae08f2 100644 --- a/port/devpipe.c +++ b/port/devpipe.c @@ -243,7 +243,7 @@ pipeclose(Chan *c) } static long -piperead(Chan *c, void *va, long n, ulong) +piperead(Chan *c, void *va, long n, vlong) { Pipe *p; @@ -284,7 +284,7 @@ pipebread(Chan *c, long n, ulong offset) * the process. */ static long -pipewrite(Chan *c, void *va, long n, ulong) +pipewrite(Chan *c, void *va, long n, vlong) { Pipe *p; diff --git a/port/devproc.c b/port/devproc.c index 5ccfdddb52f9c408fa55be0f86f2757ee7fb46eb..52d5dd24ebbf1ea93341200fecbe2ada2b5f4f01 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -284,7 +284,7 @@ procclose(Chan * c) } static long -procread(Chan *c, void *va, long n, ulong offset) +procread(Chan *c, void *va, long n, vlong off) { long l; Proc *p; @@ -296,6 +296,7 @@ procread(Chan *c, void *va, long n, ulong offset) char *a = va, *sps; int i, j, rsize, pid; char statbuf[NSEG*32]; + ulong offset = off; if(c->qid.path & CHDIR) return devdirread(c, a, n, 0, 0, procgen); @@ -563,11 +564,12 @@ mntscan(Mntwalk *mw) } static long -procwrite(Chan *c, void *va, long n, ulong offset) +procwrite(Chan *c, void *va, long n, vlong off) { int id; Proc *p, *t, *et; char *a, buf[ERRLEN]; + ulong offset = off; a = va; if(c->qid.path & CHDIR) diff --git a/port/devroot.c b/port/devroot.c index 69ca9b9e7ced0838c97415513c417cb3130bae7d..d3b5eb373f33938e74a0ac90df09203ccf247b3a 100644 --- a/port/devroot.c +++ b/port/devroot.c @@ -143,12 +143,13 @@ rdrdy(void*) } static long -rootread(Chan *c, void *buf, long n, ulong offset) +rootread(Chan *c, void *buf, long n, vlong off) { ulong t; Dirtab *d; uchar *data; Recover *r; + ulong offset = off; t = c->qid.path & ~CHDIR; switch(t){ @@ -193,7 +194,7 @@ rootread(Chan *c, void *buf, long n, ulong offset) } static long -rootwrite(Chan *c, void *buf, long n, ulong) +rootwrite(Chan *c, void *buf, long n, vlong) { char tmp[256]; diff --git a/port/devsd.c b/port/devsd.c index 3140d172f25babcf2659eb8f2de5dda9aca88dbd..b8e3204f6b41f96795fb22d423fcec84723240ee 100644 --- a/port/devsd.c +++ b/port/devsd.c @@ -231,8 +231,10 @@ sdclose(Chan *c) } static long -sdread(Chan *c, void *a, long n, ulong offset) +sdread(Chan *c, void *a, long n, vlong off) { + ulong offset = off; + if(c->qid.path & CHDIR) return devdirread(c, a, n, 0, 0, sdgen); @@ -240,9 +242,10 @@ sdread(Chan *c, void *a, long n, ulong offset) } static long -sdwrite(Chan *c, char *a, long n, ulong offset) +sdwrite(Chan *c, char *a, long n, vlong off) { Disk *d; + ulong offset = off; d = &disk[DRIVE(c->qid)]; diff --git a/port/devsrv.c b/port/devsrv.c index 99004e5138b2368b593a158428db06a6bc6b12fd..096bd2f0e0bce15ede0669d543f961b12463be78 100644 --- a/port/devsrv.c +++ b/port/devsrv.c @@ -204,14 +204,14 @@ srvclose(Chan*) } static long -srvread(Chan *c, void *va, long n, ulong) +srvread(Chan *c, void *va, long n, vlong) { isdir(c); return devdirread(c, va, n, 0, 0, srvgen); } static long -srvwrite(Chan *c, void *va, long n, ulong) +srvwrite(Chan *c, void *va, long n, vlong) { Srv *sp; Chan *c1; diff --git a/port/devssl.c b/port/devssl.c index 65fd3f1c0299dc2297dc748f7c47148f022ede0a..dcf611791709971d738f6ad87fe953eb146c8bfe 100644 --- a/port/devssl.c +++ b/port/devssl.c @@ -515,13 +515,14 @@ sslbread(Chan *c, long n, ulong offset) } static long -sslread(Chan *c, void *a, long n, ulong offset) +sslread(Chan *c, void *a, long n, vlong off) { volatile struct { Block *b; } b; Block *nb; uchar *va; int i; char buf[128]; + ulong offset = off; if(c->qid.path & CHDIR) return devdirread(c, a, n, 0, 0, sslgen); @@ -780,12 +781,13 @@ parseencryptalg(char *p, Dstate *s) } static long -sslwrite(Chan *c, void *a, long n, ulong offset) +sslwrite(Chan *c, void *a, long n, vlong off) { volatile struct { Dstate *s; } s; volatile struct { Block *b; } b; int m, t; char *p, *np, *e, buf[32]; + ulong offset = off; s.s = dstate[CONV(c->qid)]; if(s.s == 0) diff --git a/port/portdat.h b/port/portdat.h index 4a49a0c0646855fb9780fc2b1b6eef996180ef3e..f6093a75d75a96e96c32939286ff05de8e871e08 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -141,7 +141,7 @@ struct Chan Ref; Chan* next; /* allocation */ Chan* link; - ulong offset; /* in file */ + vlong offset; /* in file */ ushort type; ulong dev; ushort mode; /* read/write */ @@ -179,9 +179,9 @@ struct Dev Chan* (*open)(Chan*, int); void (*create)(Chan*, char*, int, ulong); void (*close)(Chan*); - long (*read)(Chan*, void*, long, ulong); + long (*read)(Chan*, void*, long, vlong); Block* (*bread)(Chan*, long, ulong); - long (*write)(Chan*, void*, long, ulong); + long (*write)(Chan*, void*, long, vlong); long (*bwrite)(Chan*, Block*, ulong); void (*remove)(Chan*); void (*wstat)(Chan*, char*); diff --git a/port/sysfile.c b/port/sysfile.c index 010020be50e25b19f9e14f34699d07642fd62441..943642d3d297511f392acdedd0454ac51ce7c3c4 100644 --- a/port/sysfile.c +++ b/port/sysfile.c @@ -468,12 +468,16 @@ syswrite(ulong *arg) } long -sysseek(ulong *arg) +sysvseek(ulong *arg) { Chan *c; char buf[DIRLEN]; Dir dir; - long off; + vlong off; + union { + vlong v; + ulong u[2]; + } o; c = fdtochan(arg[0], -1, 1, 0); if(c->qid.path & CHDIR) @@ -483,28 +487,48 @@ sysseek(ulong *arg) error(Eisstream); off = 0; - switch(arg[2]){ + o.u[0] = arg[1]; + o.u[1] = arg[2]; + switch(arg[3]){ case 0: - off = c->offset = arg[1]; + off = o.v; + c->offset = off; break; case 1: lock(c); /* lock for read/write update */ - c->offset += (long)arg[1]; - off = c->offset; + off = o.v + c->offset; + c->offset = off; unlock(c); break; case 2: devtab[c->type]->stat(c, buf); convM2D(buf, &dir); - c->offset = dir.length + (long)arg[1]; - off = c->offset; + off = (long)dir.length2 + o.v; /* BOTCH */ + c->offset = off; break; } return off; } +long +sysseek(ulong *arg) +{ + union { + vlong v; + ulong u[2]; + } o; + ulong a[4]; + + o.v = arg[1]; + a[0] = arg[0]; + a[1] = o.u[0]; + a[2] = o.u[1]; + a[3] = arg[2]; + return sysvseek(a); +} + long sysfstat(ulong *arg) { diff --git a/port/systab.h b/port/systab.h index c87fe9ddd82010f8b542dce835eb16f36047fb95..bcbff6f639983db3428d4793410f1f20671ec49a 100644 --- a/port/systab.h +++ b/port/systab.h @@ -20,6 +20,7 @@ Syscall sysmount; Syscall sysopen; Syscall sysread; Syscall sysseek; +Syscall sysvseek; Syscall syssleep; Syscall sysstat; Syscall sysrfork; @@ -42,7 +43,6 @@ Syscall sysunmount; Syscall syswait; Syscall syswrite9p; Syscall sysread9p; -Syscall sysdeath; Syscall *systab[]={ [SYSR1] sysr1, @@ -62,6 +62,7 @@ Syscall *systab[]={ [OPEN] sysopen, [READ] sysread, [SEEK] sysseek, + [VSEEK] sysvseek, [SLEEP] syssleep, [STAT] sysstat, [RFORK] sysrfork, @@ -104,6 +105,7 @@ char *sysctab[]={ [OPEN] "Open", [READ] "Read", [SEEK] "Seek", + [VSEEK] "Vseek", [SLEEP] "Sleep", [STAT] "Stat", [RFORK] "Rfork",