1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #include <u.h>
- #include <libc.h>
- #include "iotrack.h"
- #include "dat.h"
- #include "fns.h"
- int readonly;
- static int
- deverror(char *name, Xfs *xf, long addr, long n, long nret)
- {
- errno = Eio;
- if(nret < 0){
- chat("%s errstr=\"%r\"...", name);
- close(xf->dev);
- xf->dev = -1;
- return -1;
- }
- fprint(2, "dev %d sector %ld, %s: %ld, should be %ld\n", xf->dev, addr, name, nret, n);
- return -1;
- }
- int
- devread(Xfs *xf, long addr, void *buf, long n)
- {
- long nread;
- if(xf->dev < 0)
- return -1;
- nread = pread(xf->dev, buf, n, xf->offset+(vlong)addr*Sectorsize);
- if (nread == n)
- return 0;
- return deverror("read", xf, addr, n, nread);
- }
- int
- devwrite(Xfs *xf, long addr, void *buf, long n)
- {
- long nwrite;
- if(xf->omode==OREAD)
- return -1;
- if(xf->dev < 0)
- return -1;
- nwrite = pwrite(xf->dev, buf, n, xf->offset+(vlong)addr*Sectorsize);
- if (nwrite == n)
- return 0;
- return deverror("write", xf, addr, n, nwrite);
- }
- int
- devcheck(Xfs *xf)
- {
- char buf[Sectorsize];
- if(xf->dev < 0)
- return -1;
- if(pread(xf->dev, buf, Sectorsize, 0) != Sectorsize){
- close(xf->dev);
- xf->dev = -1;
- return -1;
- }
- return 0;
- }
|