5 typedef struct DiskPart DiskPart;
15 diskpartread(Disk *dd, u32int len, u64int offset)
17 DiskPart *d = (DiskPart*)dd;
19 if(offset+len > d->size){
20 werrstr("read past end of partition %llud + %lud > %llud", offset, len, d->size);
23 return diskread(d->subdisk, len, offset+d->offset);
27 diskpartsync(Disk *dd)
29 DiskPart *d = (DiskPart*)dd;
32 return disksync(d->subdisk);
37 diskpartclose(Disk *dd)
39 DiskPart *d = (DiskPart*)dd;
42 diskclose(d->subdisk);
47 diskpart(Disk *subdisk, u64int offset, u64int size)
51 d = mallocz(sizeof(DiskPart), 1);
58 d->disk._read = diskpartread;
59 d->disk._sync = diskpartsync;
60 d->disk._close = diskpartclose;
66 diskpartabandon(Disk *d)
68 if(d->_read != diskpartread)
70 ((DiskPart*)d)->subdisk = nil;