]> Zhao Yanbai Git Server - minix.git/commitdiff
part(8)/autopart(8): remove partition hack
authorDavid van Moolenbroek <david@minix3.org>
Sun, 14 Oct 2012 23:00:51 +0000 (01:00 +0200)
committerDavid van Moolenbroek <david@minix3.org>
Tue, 16 Oct 2012 13:24:26 +0000 (15:24 +0200)
We have actually had lseek64 for quite a while now, so it's no longer
necessary to do horrible things to the partition table just to be able
to access large offsets into a device.

Also fix the compiler warnings in these commands.

commands/autopart/autopart.c
commands/part/part.c

index 8e08fda08c8866963eb32cf99246d5a4efd71271..e07022c51f6d5922fe19fdedbcf32419d7d06290 100644 (file)
@@ -150,9 +150,9 @@ void tty_raw(void)
 char t_cd[16], t_cm[32], t_so[16], t_se[16], t_md[16], t_me[16];
 #define STATUSROW      10
 
-void putchr(int c)
+int putchr(int c)
 {
-       putchar(c);
+       return putchar(c);
 }
 
 void putstr(char *s)
@@ -359,7 +359,7 @@ struct part_entry table[1 + NR_PARTITIONS];
 int existing[1 + NR_PARTITIONS];
 unsigned long offset= 0, extbase= 0, extsize;
 int submerged= 0;
-char sort_index[1 + NR_PARTITIONS], sort_order[1 + NR_PARTITIONS];
+int sort_index[1 + NR_PARTITIONS], sort_order[1 + NR_PARTITIONS];
 unsigned cylinders= 1, heads= 1, sectors= 1, secpcyl= 1;
 unsigned alt_cyls= 1, alt_heads= 1, alt_secs= 1;
 int precise= 0;
@@ -1401,44 +1401,16 @@ void installboot(unsigned char *bootblock, char *masterboot)
 ssize_t boot_readwrite(int rw)
 /* Read (0) or write (1) the boot sector. */
 {
-       u64_t off64 = mul64u(offset, SECTOR_SIZE);
        int r = 0;
 
-#if __minix_vmd
-       /* Minix-vmd has a 64 bit seek. */
-       if (fcntl(device, F_SEEK, off64) < 0) return -1;
-#else
-       /* Minix has to gross things with the partition base. */
-       struct partition geom0, geom_seek;
-
-       if (offset >= (LONG_MAX / SECTOR_SIZE - 1)) {
-               /* Move partition base. */
-               if (ioctl(device, DIOCGETP, &geom0) < 0) return -1;
-               geom_seek.base = add64(geom0.base, off64);
-               geom_seek.size = cvu64(cmp64(add64u(off64, SECTOR_SIZE),
-                       geom0.size) <= 0 ? _STATIC_BLOCK_SIZE : 0);
-               sync();
-               if (ioctl(device, DIOCSETP, &geom_seek) < 0) return -1;
-               if (lseek(device, (off_t) 0, SEEK_SET) == -1) return -1;
-       } else {
-               /* Can reach this point normally. */
-               if (lseek(device, (off_t) offset * SECTOR_SIZE, SEEK_SET) == -1)
-                       return -1;
-       }
-#endif
+       if (lseek64(device, (u64_t) offset * SECTOR_SIZE, SEEK_SET, NULL) < 0)
+               return -1;
 
        switch (rw) {
        case 0: r= read(device, bootblock, SECTOR_SIZE);        break;
        case 1: r= write(device, bootblock, SECTOR_SIZE);       break;
        }
 
-#if !__minix_vmd
-       if (offset >= (LONG_MAX / SECTOR_SIZE - 1)) {
-               /* Restore partition base and size. */
-               sync();
-               if (ioctl(device, DIOCSETP, &geom0) < 0) return -1;
-       }
-#endif
        return r;
 }
 
index c31f3d5833f3d358cb5429e4c66f3da4644083b4..18b3ee53a08ac7ac90634fbec61bc68e9166fe3f 100644 (file)
@@ -121,9 +121,9 @@ void init_tty(void)
        tty_raw();
 }
 
-void putchr(int c)
+int putchr(int c)
 {
-       putchar(c);
+       return putchar(c);
 }
 
 void putstr(char *s)
@@ -852,7 +852,8 @@ void print(object_t *op)
        case O_LSEC:
                                /* Partition's last sector. */
                t= entry2last(pe);
-               sprintf(op->value, t == -1 ? "-1" : "%lu", t % sectors);
+               if (t == -1) strcpy(op->value, "-1");
+               else sprintf(op->value, "%lu", t % sectors);
                if (!aligned(t + 1, sectors)) op->flags|= OF_ODD;
                break;
        case O_BASE:
@@ -896,7 +897,7 @@ void print(object_t *op)
        } else {
                memset(op->value + n, ' ', op->len - n);
        }
-       op->value[op->len]= 0;
+       op->value[(int) op->len]= 0;
 
        if ((op->flags & (OF_ODD | OF_BAD)) == (oldflags & (OF_ODD | OF_BAD))
                                && strcmp(op->value, oldvalue) == 0) {
@@ -1581,44 +1582,16 @@ void installboot(unsigned char *bootblock, char *masterboot)
 ssize_t boot_readwrite(int rw)
 /* Read (0) or write (1) the boot sector. */
 {
-       u64_t off64 = mul64u(offset, SECTOR_SIZE);
-       int r;
-
-#if __minix_vmd
-       /* Minix-vmd has a 64 bit seek. */
-       if (fcntl(device, F_SEEK, off64) < 0) return -1;
-#else
-       /* Minix has to gross things with the partition base. */
-       struct partition geom0, geom_seek;
-
-       if (offset >= (LONG_MAX / SECTOR_SIZE - 1)) {
-               /* Move partition base. */
-               if (ioctl(device, DIOCGETP, &geom0) < 0) return -1;
-               geom_seek.base = add64(geom0.base, off64);
-               geom_seek.size = cvu64(cmp64(add64u(off64, SECTOR_SIZE),
-                       geom0.size) <= 0 ? _STATIC_BLOCK_SIZE : 0);
-               sync();
-               if (ioctl(device, DIOCSETP, &geom_seek) < 0) return -1;
-               if (lseek(device, (off_t) 0, SEEK_SET) == -1) return -1;
-       } else {
-               /* Can reach this point normally. */
-               if (lseek(device, (off_t) offset * SECTOR_SIZE, SEEK_SET) == -1)
-                       return -1;
-       }
-#endif
+       int r = 0;
+
+       if (lseek64(device, (u64_t) offset * SECTOR_SIZE, SEEK_SET, NULL) < 0)
+               return -1;
 
        switch (rw) {
        case 0: r= read(device, bootblock, SECTOR_SIZE);        break;
        case 1: r= write(device, bootblock, SECTOR_SIZE);       break;
        }
 
-#if !__minix_vmd
-       if (offset >= (LONG_MAX / SECTOR_SIZE - 1)) {
-               /* Restore partition base and size. */
-               sync();
-               if (ioctl(device, DIOCSETP, &geom0) < 0) return -1;
-       }
-#endif
        return r;
 }