As an added benefit, we can drop one level of indentation.
Signed-off-by: Werner Almesberger <[email protected]>
---
Index: qi/src/phase2.c
===================================================================
--- qi.orig/src/phase2.c 2009-01-08 23:41:35.000000000 -0200
+++ qi/src/phase2.c 2009-01-08 23:42:21.000000000 -0200
@@ -96,6 +96,53 @@
return len;
}
+static int do_partitions(void *kernel_dram)
+{
+ unsigned char *p = kernel_dram;
+
+ /* if there's a partition table implied, parse it, otherwise
+ * just use a fixed offset
+ */
+ if (!this_kernel->partition_index) {
+ partition_offset_blocks =
+ this_kernel->offset_blocks512_if_no_partition;
+ return 1;
+ }
+
+ if ((int)this_kernel->block_read(kernel_dram, 0, 4) < 0) {
+ puts("Bad partition read\n");
+ indicate(UI_IND_MOUNT_FAIL);
+ return 0;
+ }
+
+ if ((p[0x1fe] != 0x55) || (p[0x1ff] != 0xaa)) {
+ puts("partition signature missing\n");
+ indicate(UI_IND_MOUNT_FAIL);
+ return 0;
+ }
+
+ p += 0x1be + 8 + (0x10 * (this_kernel->partition_index - 1));
+
+ partition_offset_blocks = (((u32)p[3]) << 24) |
+ (((u32)p[2]) << 16) |
+ (((u32)p[1]) << 8) |
+ p[0];
+ partition_length_blocks = (((u32)p[7]) << 24) |
+ (((u32)p[6]) << 16) |
+ (((u32)p[5]) << 8) |
+ p[4];
+
+ puts(" Partition: ");
+ printdec(this_kernel->partition_index);
+ puts(" start +");
+ printdec(partition_offset_blocks);
+ puts(" 512-byte blocks, size ");
+ printdec(partition_length_blocks / 2048);
+ puts(" MiB\n");
+
+ return 1;
+}
+
static void do_params(unsigned initramfs_len,
const char *commandline_rootfs_append)
{
@@ -217,46 +264,8 @@
last_block_init = this_kernel->block_init;
}
- /* if there's a partition table implied, parse it, otherwise
- * just use a fixed offset
- */
- if (this_kernel->partition_index) {
- unsigned char *p = kernel_dram;
-
- if ((int)this_kernel->block_read(kernel_dram, 0, 4) < 0) {
- puts("Bad partition read\n");
- indicate(UI_IND_MOUNT_FAIL);
- return;
- }
-
- if ((p[0x1fe] != 0x55) || (p[0x1ff] != 0xaa)) {
- puts("partition signature missing\n");
- indicate(UI_IND_MOUNT_FAIL);
- return;
- }
-
- p += 0x1be + 8 + (0x10 * (this_kernel->partition_index - 1));
-
- partition_offset_blocks = (((u32)p[3]) << 24) |
- (((u32)p[2]) << 16) |
- (((u32)p[1]) << 8) |
- p[0];
- partition_length_blocks = (((u32)p[7]) << 24) |
- (((u32)p[6]) << 16) |
- (((u32)p[5]) << 8) |
- p[4];
-
- puts(" Partition: ");
- printdec(this_kernel->partition_index);
- puts(" start +");
- printdec(partition_offset_blocks);
- puts(" 512-byte blocks, size ");
- printdec(partition_length_blocks / 2048);
- puts(" MiB\n");
-
- } else
- partition_offset_blocks =
- this_kernel->offset_blocks512_if_no_partition;
+ if (!do_partitions(kernel_dram))
+ return;
/* does he want us to skip this? */
--