svn commit: r263893 - user/marcel/mkimg
Marcel Moolenaar
marcel at FreeBSD.org
Sat Mar 29 03:14:01 UTC 2014
Author: marcel
Date: Sat Mar 29 03:14:00 2014
New Revision: 263893
URL: http://svnweb.freebsd.org/changeset/base/263893
Log:
Handle the raw partition of the BSD and VTOC schemes.
Modified:
user/marcel/mkimg/bsd.c
user/marcel/mkimg/vtoc8.c
Modified: user/marcel/mkimg/bsd.c
==============================================================================
--- user/marcel/mkimg/bsd.c Sat Mar 29 00:48:50 2014 (r263892)
+++ user/marcel/mkimg/bsd.c Sat Mar 29 03:14:00 2014 (r263893)
@@ -63,7 +63,7 @@ bsd_write(int fd, lba_t imgsz, void *boo
struct disklabel *d;
struct partition *dp;
struct part *part;
- int error;
+ int error, n;
uint16_t checksum;
buf = malloc(BBSIZE);
@@ -88,17 +88,20 @@ bsd_write(int fd, lba_t imgsz, void *boo
le32enc(&d->d_secperunit, imgsz);
le16enc(&d->d_rpm, 3600);
le32enc(&d->d_magic2, DISKMAGIC);
- le16enc(&d->d_npartitions, (8 > nparts) ? 8 : nparts);
+ le16enc(&d->d_npartitions, (8 > nparts + 1) ? 8 : nparts + 1);
le32enc(&d->d_bbsize, BBSIZE);
+ dp = &d->d_partitions[RAW_PART];
+ le32enc(&dp->p_size, imgsz);
STAILQ_FOREACH(part, &partlist, link) {
- dp = &d->d_partitions[part->index];
+ n = part->index + ((part->index >= RAW_PART) ? 1 : 0);
+ dp = &d->d_partitions[n];
le32enc(&dp->p_size, part->size);
le32enc(&dp->p_offset, part->block);
dp->p_fstype = ALIAS_TYPE2INT(part->type);
}
- dp = &d->d_partitions[nparts];
+ dp = &d->d_partitions[nparts + 1];
checksum = 0;
for (p = buf; p < (u_char *)dp; p += 2)
checksum ^= le16dec(p);
@@ -119,7 +122,7 @@ static struct mkimg_scheme bsd_scheme =
.aliases = bsd_aliases,
.metadata = bsd_metadata,
.write = bsd_write,
- .nparts = 20,
+ .nparts = 19,
.bootcode = BBSIZE,
.maxsecsz = 512
};
Modified: user/marcel/mkimg/vtoc8.c
==============================================================================
--- user/marcel/mkimg/vtoc8.c Sat Mar 29 00:48:50 2014 (r263892)
+++ user/marcel/mkimg/vtoc8.c Sat Mar 29 03:14:00 2014 (r263893)
@@ -63,11 +63,14 @@ vtoc8_write(int fd, lba_t imgsz, void *b
struct vtoc8 vtoc8;
struct part *part;
u_char *p;
- int error;
+ int error, n;
uint16_t ofs, sum;
+ imgsz = ncyls * nheads * nsecs;
+
memset(&vtoc8, 0, sizeof(vtoc8));
- sprintf(vtoc8.ascii, "FreeBSD%lldM", (long long)(imgsz / 2048));
+ sprintf(vtoc8.ascii, "FreeBSD%lldM",
+ (long long)(imgsz * secsz / 1048576));
be32enc(&vtoc8.version, VTOC_VERSION);
be16enc(&vtoc8.nparts, VTOC8_NPARTS);
be32enc(&vtoc8.sanity, VTOC_SANITY);
@@ -79,15 +82,14 @@ vtoc8_write(int fd, lba_t imgsz, void *b
be16enc(&vtoc8.nsecs, nsecs);
be16enc(&vtoc8.magic, VTOC_MAGIC);
- ftruncate(fd, ncyls * nheads * nsecs *secsz);
+ ftruncate(fd, imgsz * secsz);
+ be32enc(&vtoc8.map[VTOC_RAW_PART].nblks, imgsz);
STAILQ_FOREACH(part, &partlist, link) {
- be16enc(&vtoc8.part[part->index].tag,
- ALIAS_TYPE2INT(part->type));
- be32enc(&vtoc8.map[part->index].cyl,
- part->block / (nsecs * nheads));
- be32enc(&vtoc8.map[part->index].nblks,
- part->size);
+ n = part->index + ((part->index >= VTOC_RAW_PART) ? 1 : 0);
+ be16enc(&vtoc8.part[n].tag, ALIAS_TYPE2INT(part->type));
+ be32enc(&vtoc8.map[n].cyl, part->block / (nsecs * nheads));
+ be32enc(&vtoc8.map[n].nblks, part->size);
}
/* Calculate checksum. */
@@ -111,7 +113,7 @@ static struct mkimg_scheme vtoc8_scheme
.aliases = vtoc8_aliases,
.metadata = vtoc8_metadata,
.write = vtoc8_write,
- .nparts = VTOC8_NPARTS,
+ .nparts = VTOC8_NPARTS - 1,
.maxsecsz = 512
};
More information about the svn-src-user
mailing list