]> Zhao Yanbai Git Server - minix.git/commitdiff
Use a fake geometry for files.
authorPhilip Homburg <philip@cs.vu.nl>
Mon, 15 Aug 2005 13:15:39 +0000 (13:15 +0000)
committerPhilip Homburg <philip@cs.vu.nl>
Mon, 15 Aug 2005 13:15:39 +0000 (13:15 +0000)
commands/ibm/partition.c

index bcb90ec0993986ba151209326889f229f7543a4f..4cfc606bfa2cca8c4c48b6e6cc611cf7e400788b 100755 (executable)
@@ -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);