From: Philip Homburg Date: Mon, 15 Aug 2005 13:15:39 +0000 (+0000) Subject: Use a fake geometry for files. X-Git-Tag: v3.1.0~332 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/host.html?a=commitdiff_plain;h=f0c331c51ca7d73de8b3142634c63f53fd58dd7f;p=minix.git Use a fake geometry for files. --- diff --git a/commands/ibm/partition.c b/commands/ibm/partition.c index bcb90ec09..4cfc606bf 100755 --- a/commands/ibm/partition.c +++ b/commands/ibm/partition.c @@ -293,11 +293,23 @@ void geometry(void) { int fd; struct partition geometry; + struct stat sb; if ((fd= open(device, O_RDONLY)) < 0) fatal(device); /* Get the geometry of the drive, and the device's base and size. */ - if (ioctl(fd, DIOCGETP, &geometry) < 0) fatal(device); + if (ioctl(fd, DIOCGETP, &geometry) < 0) + { + /* Faking geometry. Use the same fake geometry as part. */ + if (fstat(fd, &sb) < 0) + fatal(device); + geometry.base= cvul64(0); + geometry.size= cvul64(sb.st_size); + geometry.sectors= 32; + geometry.heads= 64; + geometry.cylinders= (sb.st_size-1)/SECTOR_SIZE/ + (geometry.sectors*geometry.heads) + 1; + } close(fd); primary.lowsec= div64u(geometry.base, SECTOR_SIZE); primary.size= div64u(geometry.size, SECTOR_SIZE);