M carrera/devether.c => carrera/devether.c +3 -2
@@ 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;
M carrera/devrtc.c => carrera/devrtc.c +5 -5
@@ 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:
/*
M ip/devip.c => ip/devip.c +3 -2
@@ 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;
M ip/kernel.h => ip/kernel.h +1 -1
@@ 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 *, ...);
M ip/kio.c => ip/kio.c +4 -3
@@ 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;
}
M pc/devastar.c => pc/devastar.c +7 -5
@@ 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);
M pc/devata.c => pc/devata.c +4 -2
@@ 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);
M pc/devether.c => pc/devether.c +3 -2
@@ 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;
M pc/devfloppy.c => pc/devfloppy.c +8 -10
@@ 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:
M pc/devi82365.c => pc/devi82365.c +10 -14
@@ 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)
M pc/devlpt.c => pc/devlpt.c +11 -10
@@ 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);
}
M pc/devrtc.c => pc/devrtc.c +4 -2
@@ 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);
M pc/devvga.c => pc/devvga.c +4 -2
@@ 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){
M pc/ether8390.c => pc/ether8390.c +1 -5
@@ 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){
M pc/etherelnk3.c => pc/etherelnk3.c +1 -1
@@ 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;
M pc/screen.h => pc/screen.h +15 -10
@@ 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*);
+
M pc/u.h => pc/u.h +2 -4
@@ 10,11 10,9 @@ typedef ushort Rune;
union Length
{
- char clength[8];
- vlong vlength;
struct{
- long hlength;
- long length;
+ long length1;
+ long length2;
};
};
M port/dev.c => port/dev.c +2 -2
@@ 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);
}
M port/devaudio.c => port/devaudio.c +3 -2
@@ 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;
M port/devcons.c => port/devcons.c +4 -2
@@ 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:
M port/devdraw.c => port/devdraw.c +4 -2
@@ 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)
M port/devdup.c => port/devdup.c +2 -2
@@ 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 */
M port/devenv.c => port/devenv.c +4 -2
@@ 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;
M port/devkprof.c => port/devkprof.c +3 -2
@@ 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:
M port/devmnt.c => port/devmnt.c +5 -2
@@ 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);
}
M port/devmouse.c => port/devmouse.c +3 -2
@@ 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;
M port/devns16552.c => port/devns16552.c +3 -2
@@ 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];
M port/devpipe.c => port/devpipe.c +2 -2
@@ 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;
M port/devproc.c => port/devproc.c +4 -2
@@ 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)
M port/devroot.c => port/devroot.c +3 -2
@@ 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];
M port/devsd.c => port/devsd.c +5 -2
@@ 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)];
M port/devsrv.c => port/devsrv.c +2 -2
@@ 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;
M port/devssl.c => port/devssl.c +4 -2
@@ 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)
M port/portdat.h => port/portdat.h +3 -3
@@ 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*);
M port/sysfile.c => port/sysfile.c +32 -8
@@ 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,29 487,49 @@ 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)
{
Chan *c;
M port/systab.h => port/systab.h +3 -1
@@ 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",