summaryrefslogtreecommitdiff
path: root/sys/src/cmd/dossrv/dosfs.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-12-23 22:43:29 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2018-12-23 22:43:29 +0100
commit1e0b65c8bfb2f1b6fbc189795b73a6e89b05dc75 (patch)
tree5e32d273de43cfc015c8efcd306e1bcdb28e20e4 /sys/src/cmd/dossrv/dosfs.c
parentd843bc8e22a7db269867fdc702bd0043e4f499a0 (diff)
dossrv: make GLONG() return ulong, handle getsect() error in dostat()
Diffstat (limited to 'sys/src/cmd/dossrv/dosfs.c')
-rw-r--r--sys/src/cmd/dossrv/dosfs.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/sys/src/cmd/dossrv/dosfs.c b/sys/src/cmd/dossrv/dosfs.c
index 4dd344a9f..4a644fca5 100644
--- a/sys/src/cmd/dossrv/dosfs.c
+++ b/sys/src/cmd/dossrv/dosfs.c
@@ -631,7 +631,7 @@ out:
sync();
}
-static void
+static int
dostat(Xfile *f, Dir *d)
{
Dosptr *dp;
@@ -663,6 +663,8 @@ dostat(Xfile *f, Dir *d)
}
if(prevdo < 0 && dp->prevaddr != -1){
p = getsect(f->xf, dp->prevaddr);
+ if(p == nil)
+ return -1;
for(prevdo = ((Dosbpb*)f->xf->ptr)->sectsize-DOSDIRSIZE; prevdo >= 0; prevdo -= DOSDIRSIZE){
if(p->iobuf[prevdo+11] != 0xf)
break;
@@ -674,6 +676,7 @@ dostat(Xfile *f, Dir *d)
if(islong && sum == -1 && nameok(namebuf))
strcpy(d->name, namebuf);
}
+ return 0;
}
void
@@ -687,12 +690,13 @@ rstat(void)
errno = Eio;
return;
}
-
dir.name = repdata;
- dostat(f, &dir);
-
- rep->nstat = convD2M(&dir, statbuf, sizeof statbuf);
- rep->stat = statbuf;
+ if(dostat(f, &dir) < 0)
+ errno = Eio;
+ else {
+ rep->nstat = convD2M(&dir, statbuf, sizeof statbuf);
+ rep->stat = statbuf;
+ }
putfile(f);
}
@@ -724,7 +728,11 @@ rwstat(void)
changes = 0;
dir.name = repdata;
- dostat(f, &dir);
+ if(dostat(f, &dir) < 0){
+ errno = Eio;
+ goto out;
+ }
+
if(convM2D(req->stat, req->nstat, &wdir, (char*)statbuf) != req->nstat){
errno = Ebadstat;
goto out;