diff options
author | marcel <marcel@FreeBSD.org> | 2002-11-03 01:37:08 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2002-11-03 01:37:08 +0000 |
commit | c9f86b731d744756f510247ea7f52517bc88c0c1 (patch) | |
tree | 248aa00e829c7a9df6ab76a630fb26cf12c0e440 /lib | |
parent | 02575bafa7d27ede2d0ed3b05d481df92b74b89c (diff) | |
download | FreeBSD-src-c9f86b731d744756f510247ea7f52517bc88c0c1.zip FreeBSD-src-c9f86b731d744756f510247ea7f52517bc88c0c1.tar.gz |
Initialize d->bios_cyl. We know the media size in sectors, the number
of heads end the number of sectors per track. If there's an obvious
insanity (heads and sectors are both zero or the media size is not
an integral multiple of heads times sector) we set the number of
cylinders to zero.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libdisk/disk.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c index fe73d3e..2a1b6aa 100644 --- a/lib/libdisk/disk.c +++ b/lib/libdisk/disk.c @@ -153,7 +153,7 @@ Int_Open_Disk(const char *name) d->name = strdup(name); a = strsep(&p, " "); /* length in bytes */ - o = strtoimax(a, &r, 0); + len = strtoimax(a, &r, 0); if (*r) { printf("BARF %d <%d>\n", __LINE__, *r); exit (0); } a = strsep(&p, " "); /* sectorsize */ @@ -161,12 +161,11 @@ Int_Open_Disk(const char *name) if (*r) { printf("BARF %d <%d>\n", __LINE__, *r); exit (0); } d->sector_size = s; + len /= s; /* media size in number of sectors. */ - if (Add_Chunk(d, 0, o / s, name, whole, 0, 0, "-")) + if (Add_Chunk(d, 0, len, name, whole, 0, 0, "-")) DPRINT(("Failed to add 'whole' chunk")); - len = o / s; - for (;;) { a = strsep(&p, " "); if (a == NULL) @@ -182,6 +181,13 @@ Int_Open_Disk(const char *name) printf("HUH ? <%s> <%s>\n", a, b); } + /* + * Calculate the number of cylinders this disk must have. If we have + * an obvious insanity, we set the number of cyclinders to zero. + */ + o = d->bios_hd * d->bios_sect; + d->bios_cyl = (o != 0 && (len % o) == 0) ? len / o : 0; + p = q; lo[0] = 0; |