diff options
Diffstat (limited to 'lib/libdisk/disk.c')
-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; |