## diffname port/devdup.c 1990/0227
## diff -e /dev/null /n/bootesdump/1990/0227/sys/src/9/mips/devdup.c
0a
#include "u.h"
#include "lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "errno.h"
#include "devtab.h"
int
dupgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp)
{
char buf[8];
Chan *f;
static int perm[] = { 0400, 0200, 0600, 0 };
if(s >= NFD)
return -1;
if((f=u->fd[s]) == 0)
return 0;
sprint(buf, "%ld", s);
devdir(c, s, buf, 0, perm[f->mode&3], dp);
return 1;
}
void
dupinit(void)
{
}
void
dupreset(void)
{
}
Chan *
dupattach(char *spec)
{
return devattach('d', spec);
}
Chan *
dupclone(Chan *c, Chan *nc)
{
return devclone(c, nc);
}
int
dupwalk(Chan *c, char *name)
{
return devwalk(c, name, (Dirtab *)0, 0, dupgen);
}
void
dupstat(Chan *c, char *db)
{
devstat(c, db, (Dirtab *)0, 0L, dupgen);
}
Chan *
dupopen(Chan *c, int omode)
{
Chan *f;
if(c->qid == CHDIR){
if(omode != 0)
error(0, Eisdir);
c->mode = 0;
c->flag |= COPEN;
c->offset = 0;
return c;
}
fdtochan(c->qid, openmode(omode)); /* error check only */
f = u->fd[c->qid];
close(c);
incref(f);
return f;
}
void
dupcreate(Chan *c, char *name, int omode, ulong perm)
{
error(0, Eperm);
}
void
dupremove(Chan *c)
{
error(0, Eperm);
}
void
dupwstat(Chan *c, char *dp)
{
error(0, Egreg);
}
void
dupclose(Chan *c)
{
}
long
dupread(Chan *c, void *va, long n)
{
char *a = va;
if(c->qid != CHDIR)
panic("dupread");
return devdirread(c, a, n, (Dirtab *)0, 0L, dupgen);
}
long
dupwrite(Chan *c, void *va, long n)
{
panic("dupwrite");
}
void
duperrstr(Error *e, char *buf)
{
rooterrstr(e, buf);
}
void
dupuserstr(Error *e, char *buf)
{
consuserstr(e, buf);
}
.
## diffname port/devdup.c 1990/11211
## diff -e /n/bootesdump/1990/0227/sys/src/9/mips/devdup.c /n/bootesdump/1990/11211/sys/src/9/mips/devdup.c
118,129d
109c
if(c->qid.path != CHDIR)
.
96c
error(Egreg);
.
90c
error(Eperm);
.
84c
error(Eperm);
.
74,75c
fdtochan(c->qid.path, openmode(omode)); /* error check only */
f = u->fd[c->qid.path];
.
68c
error(Eisdir);
.
66c
if(c->qid.path == CHDIR){
.
23c
devdir(c, (Qid){s, 0}, buf, 0, perm[f->mode&3], dp);
.
## diffname port/devdup.c 1991/0320
## diff -e /n/bootesdump/1990/1210/sys/src/9/mips/devdup.c /n/bootesdump/1991/0320/sys/src/9/port/devdup.c
77a
if(omode & OCEXEC)
f->flag |= CCEXEC;
.
## diffname port/devdup.c 1991/0411
## diff -e /n/bootesdump/1991/0320/sys/src/9/port/devdup.c /n/bootesdump/1991/0411/sys/src/9/port/devdup.c
117c
dupwrite(Chan *c, void *va, long n, ulong offset)
.
107c
dupread(Chan *c, void *va, long n, ulong offset)
.
## diffname port/devdup.c 1991/0419
## diff -e /n/bootesdump/1991/0411/sys/src/9/port/devdup.c /n/bootesdump/1991/0419/sys/src/9/port/devdup.c
48a
Chan*
dupclwalk(Chan *c, char *name)
{
return devclwalk(c, name);
}
.
## diffname port/devdup.c 1991/0425
## diff -e /n/bootesdump/1991/0419/sys/src/9/port/devdup.c /n/bootesdump/1991/0425/sys/src/9/port/devdup.c
64c
int fd;
Chan *f;
if(c->qid.path == CHDIR){
devstat(c, db, (Dirtab *)0, 0L, dupgen);
}else{
fd = c->qid.path;
SET(f);
if(fd<0 || NFD<=fd || (f=u->fd[fd])==0)
error(Ebadfd);
(*devtab[f->type].stat)(f, (char*)db);
}
.
## diffname port/devdup.c 1991/0426
## diff -e /n/bootesdump/1991/0425/sys/src/9/port/devdup.c /n/bootesdump/1991/0426/sys/src/9/port/devdup.c
64,75c
devstat(c, db, (Dirtab *)0, 0L, dupgen);
.
## diffname port/devdup.c 1991/0427
## diff -e /n/bootesdump/1991/0426/sys/src/9/port/devdup.c /n/bootesdump/1991/0427/sys/src/9/port/devdup.c
49,54d
## diffname port/devdup.c 1991/0705
## diff -e /n/bootesdump/1991/0427/sys/src/9/port/devdup.c /n/bootesdump/1991/0705/sys/src/9/port/devdup.c
75c
f = u->p->fgrp->fd[c->qid.path];
.
20c
if((f=fgrp->fd[s]) == 0)
.
14a
Fgrp *fgrp = u->p->fgrp;
.
## diffname port/devdup.c 1991/1011
## diff -e /n/bootesdump/1991/0705/sys/src/9/port/devdup.c /n/bootesdump/1991/1011/sys/src/9/port/devdup.c
75c
fdtochan(c->qid.path, openmode(omode), 0); /* error check only */
.
## diffname port/devdup.c 1991/1109
## diff -e /n/bootesdump/1991/1011/sys/src/9/port/devdup.c /n/bootesdump/1991/1109/sys/src/9/port/devdup.c
24c
devdir(c, (Qid){s, 0}, buf, 0, eve, perm[f->mode&3], dp);
.
## diffname port/devdup.c 1991/1115
## diff -e /n/bootesdump/1991/1109/sys/src/9/port/devdup.c /n/bootesdump/1991/1115/sys/src/9/port/devdup.c
119a
USED(c, va, n, offset);
.
104a
USED(c);
.
98a
USED(c);
.
92a
USED(c);
.
86a
USED(c, name, omode, perm);
.
## diffname port/devdup.c 1992/0111
## diff -e /n/bootesdump/1991/1115/sys/src/9/port/devdup.c /n/bootesdump/1992/0111/sys/src/9/port/devdup.c
6c
#include "../port/error.h"
.
## diffname port/devdup.c 1992/0321
## diff -e /n/bootesdump/1992/0111/sys/src/9/port/devdup.c /n/bootesdump/1992/0321/sys/src/9/port/devdup.c
2c
#include "../port/lib.h"
.
## diffname port/devdup.c 1992/0520
## diff -e /n/bootesdump/1992/0321/sys/src/9/port/devdup.c /n/bootesdump/1992/0520/sys/src/9/port/devdup.c
125a
return 0; /* not reached */
.
## diffname port/devdup.c 1992/0711
## diff -e /n/bootesdump/1992/0520/sys/src/9/port/devdup.c /n/bootesdump/1992/0711/sys/src/9/port/devdup.c
115a
USED(offset);
.
101a
USED(dp);
.
18a
USED(tab);
USED(ntab);
.
## diffname port/devdup.c 1992/0825
## diff -e /n/bootesdump/1992/0711/sys/src/9/port/devdup.c /n/bootesdump/1992/0825/sys/src/9/port/devdup.c
77c
fdtochan(c->qid.path, openmode(omode), 0, 0); /* error check only */
.
## diffname port/devdup.c 1993/0501
## diff -e /n/bootesdump/1992/0825/sys/src/9/port/devdup.c /n/fornaxdump/1993/0501/sys/src/brazil/port/devdup.c
78c
f = up->fgrp->fd[c->qid.path];
.
15c
Fgrp *fgrp = up->fgrp;
.
## diffname port/devdup.c 1995/0108
## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/port/devdup.c /n/fornaxdump/1995/0108/sys/src/brazil/port/devdup.c
130a
}
long
dupbwrite(Chan *c, Block *bp, ulong offset)
{
return devbwrite(c, bp, offset);
.
124a
Block*
dupbread(Chan *c, long n, ulong offset)
{
return devbread(c, n, offset);
}
.
## diffname port/devdup.c 1995/0804
## diff -e /n/fornaxdump/1995/0108/sys/src/brazil/port/devdup.c /n/fornaxdump/1995/0804/sys/src/brazil/port/devdup.c
134d
132c
dupwrite(Chan*, void*, long, ulong)
.
119d
115c
dupread(Chan *c, void *va, long n, ulong)
.
111d
109c
dupclose(Chan*)
.
103,104d
101c
dupwstat(Chan*, char*)
.
96d
94c
dupremove(Chan*)
.
89d
87c
dupcreate(Chan*, char*, int, ulong)
.
19,20d
12c
dupgen(Chan *c, Dirtab*, int, int s, Dir *dp)
.
## diffname port/devdup.c 1996/0223
## diff -e /n/fornaxdump/1995/0804/sys/src/brazil/port/devdup.c /n/fornaxdump/1996/0223/sys/src/brazil/port/devdup.c
8d
## diffname port/devdup.c 1997/0327
## diff -e /n/fornaxdump/1996/0223/sys/src/brazil/port/devdup.c /n/emeliedump/1997/0327/sys/src/brazil/port/devdup.c
129,133c
Dev dupdevtab = {
devreset,
devinit,
dupattach,
devclone,
dupwalk,
dupstat,
dupopen,
devcreate,
dupclose,
dupread,
devbread,
dupwrite,
devbwrite,
devremove,
devwstat,
};
.
116,122c
static long
.
106c
static long
.
83,101c
static void
.
76c
cclose(c);
.
61c
static Chan*
.
55c
static void
.
43,49c
static int
.
27,37c
static Chan*
.
8,10c
static int
.
## diffname port/devdup.c 1997/0408
## diff -e /n/emeliedump/1997/0327/sys/src/brazil/port/devdup.c /n/emeliedump/1997/0408/sys/src/brazil/port/devdup.c
87a
'd',
"dup",
.
## diffname port/devdup.c 1997/0603
## diff -e /n/emeliedump/1997/0408/sys/src/brazil/port/devdup.c /n/emeliedump/1997/0603/sys/src/brazil/port/devdup.c
16c
if(s >= fgrp->maxfd)
.
## diffname port/devdup.c 1997/0606
## diff -e /n/emeliedump/1997/0603/sys/src/brazil/port/devdup.c /n/emeliedump/1997/0606/sys/src/brazil/port/devdup.c
16c
if(s > fgrp->maxfd)
.
## diffname port/devdup.c 1998/0319
## diff -e /n/emeliedump/1997/0606/sys/src/brazil/port/devdup.c /n/emeliedump/1998/0319/sys/src/brazil/port/devdup.c
81c
dupwrite(Chan*, void*, long, vlong)
.
71c
dupread(Chan *c, void *va, long n, vlong)
.
## diffname port/devdup.c 1998/0825
## diff -e /n/emeliedump/1998/0319/sys/src/brazil/port/devdup.c /n/emeliedump/1998/0825/sys/src/brazil/port/devdup.c
20c
sprint(buf, "%d", s);
.
## diffname port/devdup.c 1999/1230
## diff -e /n/emeliedump/1998/0825/sys/src/brazil/port/devdup.c /n/emeliedump/1999/1230/sys/src/9/port/devdup.c
15a
if(s == DEVDOTDOT){
devdir(c, c->qid, "#d", 0, eve, 0555, dp);
return 1;
}
.
## diffname port/devdup.c 2001/0527
## diff -e /n/emeliedump/1999/1230/sys/src/9/port/devdup.c /n/emeliedump/2001/0527/sys/src/9/port/devdup.c
98d
86a
if(c->qid.path & 1){
print("do ctl write\n");
return -1;
}
.
85c
dupwrite(Chan *c, void *va, long n, vlong)
.
79,81c
if(c->qid.type == QTDIR)
return devdirread(c, a, n, (Dirtab *)0, 0L, dupgen);
twicefd = c->qid.path - 1;
fd = twicefd/2;
f = up->fgrp;
if(twicefd & 1){
if(fd<0 || f->nfd<=fd)
error(Ebadfd);
c = fdtochan(fd, -1, 0, 0);
snprint(buf, sizeof buf, "%d %ld", fd, c->iounit);
return readstr((ulong)offset, va, n, buf);
}
panic("dupread");
return 0;
.
77a
char buf[256];
int fd, twicefd;
Fgrp *f;
.
75c
dupread(Chan *c, void *va, long n, vlong offset)
.
60,63c
twicefd = c->qid.path - 1;
fd = twicefd/2;
if((twicefd & 1)){
/* ctl file */
f = c;
}else{
/* fd file */
fdtochan(fd, openmode(omode), 0, 0); /* error check only */
f = up->fgrp->fd[fd];
cclose(c);
incref(f);
}
.
52c
if(c->qid.type == QTDIR){
.
50a
int fd, twicefd;
.
44c
return devstat(c, db, n, (Dirtab *)0, 0L, dupgen);
.
41,42c
static int
dupstat(Chan *c, uchar *db, int n)
.
38c
return devwalk(c, nc, name, nname, (Dirtab *)0, 0, dupgen);
.
35,36c
static Walkqid*
dupwalk(Chan *c, Chan *nc, char **name, int nname)
.
24,25c
if(s & 1){
p = 0600;
sprint(up->genbuf, "%dctl", s/2);
}else{
p = perm[f->mode&3];
sprint(up->genbuf, "%d", s/2);
}
mkqid(&q, s+1, 0, QTFILE);
devdir(c, q, up->genbuf, 0, eve, p, dp);
.
22c
if((f=fgrp->fd[s/2]) == nil)
.
20c
if(s == 0)
return 0;
s--;
if(s > 2*fgrp->maxfd)
.
17c
devdir(c, c->qid, ".", 0, eve, DMDIR|0555, dp);
.
14a
int p;
Qid q;
.
11d
9c
dupgen(Chan *c, char *, Dirtab*, int, int s, Dir *dp)
.
7a
/* Qid is (2*fd + (file is ctl))+1 */
.
## diffname port/devdup.c 2001/0712
## diff -e /n/emeliedump/2001/0527/sys/src/9/port/devdup.c /n/emeliedump/2001/0712/sys/src/9/port/devdup.c
121c
dupwrite(Chan *c, void*, long, vlong)
.
## diffname port/devdup.c 2001/0802
## diff -e /n/emeliedump/2001/0712/sys/src/9/port/devdup.c /n/emeliedump/2001/0802/sys/src/9/port/devdup.c
123c
int fd, twicefd;
twicefd = c->qid.path - 1;
fd = twicefd/2;
if(twicefd & 1){
print("writing ctl file\n");
.
78a
f->mode = openmode(omode);
f->flag |= COPEN;
f->offset = 0;
.
## diffname port/devdup.c 2001/0803
## diff -e /n/emeliedump/2001/0802/sys/src/9/port/devdup.c /n/emeliedump/2001/0803/sys/src/9/port/devdup.c
126,134d
124c
dupwrite(Chan*, void*, long, vlong)
.
116c
procfdprint(c, fd, 0, buf, sizeof buf);
.
104c
int fd, twicefd, m;
.
31c
p = 0400;
.
## diffname port/devdup.c 2001/0819
## diff -e /n/emeliedump/2001/0803/sys/src/9/port/devdup.c /n/emeliedump/2001/0819/sys/src/9/port/devdup.c
73a
if(c->qid.type & QTAUTH)
error(Eperm);
.
66c
if(c->qid.type & QTDIR){
.
## diffname port/devdup.c 2001/0820
## diff -e /n/emeliedump/2001/0819/sys/src/9/port/devdup.c /n/emeliedump/2001/0820/sys/src/9/port/devdup.c
26c
if(s/2 > fgrp->maxfd)
.
## diffname port/devdup.c 2001/0822
## diff -e /n/emeliedump/2001/0820/sys/src/9/port/devdup.c /n/emeliedump/2001/0822/sys/src/9/port/devdup.c
106c
int fd, twicefd;
.
## diffname port/devdup.c 2001/1005
## diff -e /n/emeliedump/2001/0822/sys/src/9/port/devdup.c /n/emeliedump/2001/1005/sys/src/9/port/devdup.c
118a
cclose(c);
.
115,117c
c = fdtochan(fd, -1, 0, 1);
.
113d
107d
89d
86,87c
f = fdtochan(fd, openmode(omode), 0, 1);
.
## diffname port/devdup.c 2002/0109
## diff -e /n/emeliedump/2001/1005/sys/src/9/port/devdup.c /n/emeliedump/2002/0109/sys/src/9/port/devdup.c
132a
devshutdown,
.
|