[PATCH 08/13] DISK: Add common partition handling for disk like media

Juergen Beisert jbe at pengutronix.de
Mon Nov 21 06:30:09 EST 2011


Next try. Now only local vars are used.

diff --git a/common/partitions.c b/common/partitions.c
index f3e0f6f..6310988 100644
--- a/common/partitions.c
+++ b/common/partitions.c
@@ -42,14 +42,13 @@ struct partition_desc {
 	struct partition parts[8];
 };
 
-static struct partition_desc pdesc;
-
-static void add_one_partition_entry(struct partition *p)
+static void add_one_partition_entry(struct partition *p,
+						struct partition_desc *pdesc)
 {
-	if (pdesc.used_entries >= 8)
+	if (pdesc->used_entries >= 8)
 		return;	/* ignore */
-	pdesc.parts[pdesc.used_entries] = *p;
-	pdesc.used_entries++;
+	pdesc->parts[pdesc->used_entries] = *p;
+	pdesc->used_entries++;
 }
 
 /**
@@ -125,12 +124,14 @@ static int read_dos_partition_table(struct block_device *blk, uint8_t *sector_bu
 /**
  * Check if a DOS like partition describes this block device
  * @param blk Block device to register to
+ * @param pd Where to store the partition information
  * @return 0 on success, -EINVAL if no partition table was found
  *
  * It seems at least on ARM this routine canot use temp. stack space for the
  * sector. So, keep the malloc/free.
  */
-static int __maybe_unused try_dos_partition(struct block_device *blk)
+static int __maybe_unused try_dos_partition(struct block_device *blk,
+						struct partition_desc *pd)
 {
 	int part_order[4] = {0, 1, 2, 3};
 	uint8_t *buffer;
@@ -163,7 +164,7 @@ static int __maybe_unused try_dos_partition(struct block_device *blk)
 			continue;
 
 		if (pentry.first_sec != 0)
-			add_one_partition_entry(&pentry);
+			add_one_partition_entry(&pentry, pd);
 		else {
 			dev_dbg(blk->dev, "Skipping empty partition %d\n", i);
 		}
@@ -204,12 +205,13 @@ static int register_one_partition(struct block_device *blk,
  */
 int parse_partition_table(struct block_device *blk)
 {
+	struct partition_desc pdesc = { .used_entries = 0, };
 	int i;
 	int rc = 0;
 
 #ifdef CONFIG_PARTITION_DISK_DOS
 	if (pdesc.used_entries == 0)
-		try_dos_partition(blk);
+		try_dos_partition(blk, &pdesc);
 #endif
 
 	if (pdesc.used_entries != 0) {


-- 
Pengutronix e.K.                              | Juergen Beisert             |
Linux Solutions for Science and Industry      | http://www.pengutronix.de/  |



More information about the barebox mailing list