commit f879ad5e1049dfa365868aee963cfe7d6a5d32b9
parent 1c8fd7585b7625481e9fd45a17861c4d820d9608
Author: Roberto Vargas <roberto.vargas@arm.com>
Date: Thu, 21 Feb 2019 21:35:37 +0000
[dev] Multiple fixes for devices
Change-Id: Ie5ce7d051782e49e9a3d31cd252dbe5ff85a9d4c
Diffstat:
2 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/drivers/dev.c b/drivers/dev.c
@@ -186,6 +186,7 @@ devclone(Chan *c, Chan *nc)
nc->dev = c->dev;
nc->mode = c->mode;
nc->offset = c->offset;
+ nc->type = c->type;
return nc;
}
@@ -214,13 +215,12 @@ devwalk(Chan *c, const char *name, const Dirtab *tab, int ntab, Devgen *gen)
if (name[0] == '.' && name[1] == '\0')
return 1;
- for (i = 0; ;i++) {
+ for (i = 0; ; i++) {
switch ((*gen)(c, tab, ntab, i, &dir)) {
- case -1:
- errno = ENOENT;
- return 0;
case 0:
- continue;
+ errno = ENOENT;
+ case -1:
+ return -1;
case 1:
if (strcmp(name, dir.name))
continue;
@@ -228,15 +228,13 @@ devwalk(Chan *c, const char *name, const Dirtab *tab, int ntab, Devgen *gen)
return 1;
}
}
-
- return 0;
}
int
dirread(Chan *c,
- unsigned char *buf, int nbytes,
- const Dirtab *tab, int ntab,
- Devgen *gen)
+ unsigned char *buf, int nbytes,
+ const Dirtab *tab, int ntab,
+ Devgen *gen)
{
int cnt, i, n;
Dir dir;
@@ -405,10 +403,9 @@ err0:
void
idev(void)
{
- Chan *c, *clim;
+ Chan *c;
- clim = &fdset[NR_CHANS];
- for (c = fdset; c < clim; c++)
+ for (c = fdset; c < &fdset[NR_CHANS]; c++)
c->type = NODEV;
if ((c = devattach('/', 0)) == NULL)
diff --git a/drivers/devroot.c b/drivers/devroot.c
@@ -23,7 +23,7 @@ static const Dirtab devfstab[] = {
static Chan *bindpoint[Qmax];
static int
-gettab(Qid qid, const Dirtab **tab)
+roottab(Qid qid, const Dirtab **tab)
{
switch (qid) {
case Qroot:
@@ -37,7 +37,7 @@ gettab(Qid qid, const Dirtab **tab)
*tab = NULL;
return 0;
default:
- panic("gettab");
+ panic("roottab");
}
}
@@ -49,7 +49,7 @@ rootwalk(Chan *c, const char *name)
Chan *mnt;
const Dirtab *tab;
- n = gettab(c->qid & ~CHDIR, &tab);
+ n = roottab(c->qid & ~CHDIR, &tab);
if (devwalk(c, name, tab, n, devgen) < 0)
return -1;
@@ -99,9 +99,9 @@ rootread(Chan *c, void *buf, int n)
if ((c->qid & CHDIR) == 0)
return -1;
- ntab = gettab(c->qid, &tab);
+ ntab = roottab(c->qid & ~CHDIR, &tab);
- return dirread(c, buf, n, dirtab, ntab, devgen);
+ return dirread(c, buf, n, tab, ntab, devgen);
}
static int