Handle read_block() failures by ignoring the disk rather than

dumping core.
This commit is contained in:
brian 2004-06-04 11:49:11 +00:00
parent 284de6b08c
commit 1a106ea8b6
4 changed files with 34 additions and 10 deletions

View File

@ -51,7 +51,10 @@ Write_Disk(const struct disk *d1)
}
for (i = 0; i < BBSIZE/512; i++) {
p = read_block(fd, i + c1->offset, 512);
if (!(p = read_block(fd, i + c1->offset, 512))) {
close (fd);
return (1);
}
memcpy(buf + 512 * i, p, 512);
free(p);
}

View File

@ -35,7 +35,8 @@ Write_FreeBSD(int fd, const struct disk *new, const struct chunk *c1)
u_char buf[BBSIZE];
for (i = 0; i < BBSIZE/512; i++) {
p = read_block(fd, i + c1->offset, 512);
if (!(p = read_block(fd, i + c1->offset, 512)))
return (1);
memcpy(buf + 512 * i, p, 512);
free(p);
}
@ -101,7 +102,10 @@ Write_Disk(const struct disk *d1)
return 1;
memset(s, 0, sizeof s);
mbr = read_block(fd, 0, d1->sector_size);
if (!(mbr = read_block(fd, 0, d1->sector_size))) {
close (fd);
return (1);
}
dp = (struct dos_partition *)(mbr + DOSPARTOFF);
memcpy(work, dp, sizeof work);
dp = work;
@ -178,7 +182,10 @@ Write_Disk(const struct disk *d1)
if (dp[i].dp_typ == 0xa5)
dp[i].dp_flag = 0x80;
mbr = read_block(fd, 0, d1->sector_size);
if (!(mbr = read_block(fd, 0, d1->sector_size))) {
close (fd);
return (1);
}
if (d1->bootmgr) {
memcpy(mbr, d1->bootmgr, DOSPARTOFF);
Cfg_Boot_Mgr(mbr, need_edd);

View File

@ -35,7 +35,8 @@ Write_FreeBSD(int fd, const struct disk *new, const struct chunk *c1)
u_char buf[BBSIZE];
for (i = 0; i < BBSIZE/512; i++) {
p = read_block(fd, i + c1->offset, 512);
if (!(p = read_block(fd, i + c1->offset, 512)))
return (1);
memcpy(buf + 512 * i, p, 512);
free(p);
}
@ -101,7 +102,10 @@ Write_Disk(const struct disk *d1)
return 1;
memset(s, 0, sizeof s);
mbrblk = read_block(fd, 0, d1->sector_size);
if (!(mbrblk = read_block(fd, 0, d1->sector_size))) {
close (fd);
return (1);
}
dp = (struct dos_partition *)(mbrblk + DOSPARTOFF);
memcpy(work, dp, sizeof work);
dp = work;
@ -178,7 +182,10 @@ Write_Disk(const struct disk *d1)
if (dp[i].dp_typ == 0xa5)
dp[i].dp_flag = 0x80;
mbrblk = read_block(fd, 0, d1->sector_size);
if (!(mbrblk = read_block(fd, 0, d1->sector_size))) {
close (fd);
return (1);
}
if (d1->bootmgr) {
memcpy(mbrblk, d1->bootmgr, DOSPARTOFF);
Cfg_Boot_Mgr(mbrblk, need_edd);

View File

@ -37,7 +37,8 @@ Write_FreeBSD(int fd, const struct disk *new, const struct chunk *c1)
u_char buf[BBSIZE];
for (i = 0; i < BBSIZE / 512; i++) {
p = read_block(fd, i + c1->offset, 512);
if (!(p = read_block(fd, i + c1->offset, 512)))
return (1);
memcpy(buf + 512 * i, p, 512);
free(p);
}
@ -87,7 +88,10 @@ Write_Disk(const struct disk *d1)
}
memset(s, 0, sizeof s);
mbrblk = read_block(fd, 1, d1->sector_size);
if (!(mbrblk = read_block(fd, 1, d1->sector_size))) {
close (fd);
return (1);
}
dp = (struct pc98_partition *)(mbrblk + DOSPARTOFF);
memcpy(work, dp, sizeof work);
dp = work;
@ -151,7 +155,10 @@ Write_Disk(const struct disk *d1)
if (d1->bootipl)
write_block(fd, 0, d1->bootipl, d1->sector_size);
mbrblk = read_block(fd, 1, d1->sector_size);
if (!(mbrblk = read_block(fd, 1, d1->sector_size))) {
close (fd);
return (1);
}
memcpy(mbrblk + DOSPARTOFF, dp, sizeof *dp * NDOSPART);
/* XXX - for entire FreeBSD(98) */
for (c1 = d1->chunks->part; c1; c1 = c1->next)