Blob Blame History Raw
diff -up parted-1.8.8/libparted/labels/bsd.c.alpha parted-1.8.8/libparted/labels/bsd.c
--- parted-1.8.8/libparted/labels/bsd.c.alpha	2007-07-23 07:58:31.000000000 -1000
+++ parted-1.8.8/libparted/labels/bsd.c	2008-02-05 14:34:01.000000000 -1000
@@ -108,6 +108,9 @@ typedef struct {
 
 typedef struct {
 	uint8_t		type;
+	int			boot;
+	int			raid;
+	int			lvm;
 } BSDPartitionData;
 
 static PedDiskType bsd_disk_type;
@@ -394,6 +397,9 @@ bsd_partition_new (const PedDisk* disk, 
 		if (!bsd_data)
 			goto error_free_part;
 		bsd_data->type = 0;
+		bsd_data->boot = 0;
+		bsd_data->raid = 0;
+		bsd_data->lvm  = 0;
 	} else {
 		part->disk_specific = NULL;
 	}
@@ -423,6 +429,9 @@ bsd_partition_duplicate (const PedPartit
 	old_bsd_data = (BSDPartitionData*) part->disk_specific;
 	new_bsd_data = (BSDPartitionData*) new_part->disk_specific;
 	new_bsd_data->type = old_bsd_data->type;
+	new_bsd_data->boot = old_bsd_data->boot;
+	new_bsd_data->raid = old_bsd_data->raid;
+	new_bsd_data->lvm = old_bsd_data->lvm;
 	return new_part;
 }
 
@@ -456,14 +465,61 @@ bsd_partition_set_system (PedPartition* 
 static int
 bsd_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
 {
-	/* no flags for bsd */
+	PedDisk*			disk;
+//	PedPartition*		walk; // since -Werror, this unused variable would break build
+	BSDPartitionData*	bsd_data;
+
+	PED_ASSERT (part != NULL, return 0);
+	PED_ASSERT (part->disk_specific != NULL, return 0);
+	PED_ASSERT (part->disk != NULL, return 0);
+
+	bsd_data = part->disk_specific;
+	disk = part->disk;
+
+	switch (flag) {
+		case PED_PARTITION_BOOT:
+			bsd_data->boot = state;
+			return 1;
+		case PED_PARTITION_RAID:
+			if (state) {
+				bsd_data->lvm = 0;
+			}
+			bsd_data->raid = state;
+			return 1;
+		case PED_PARTITION_LVM:
+			if (state) {
+				bsd_data->raid = 0;
+			}
+			bsd_data->lvm = state;
+			return 1;
+		default:
+			;
+	}
 	return 0;
 }
 
 static int
 bsd_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
 {
-	/* no flags for bsd */
+	BSDPartitionData*		bsd_data;
+
+	PED_ASSERT (part != NULL, return 0);
+	PED_ASSERT (part->disk_specific != NULL, return 0);
+
+	bsd_data = part->disk_specific;
+	switch (flag) {
+		case PED_PARTITION_BOOT:
+			return bsd_data->boot;
+
+		case PED_PARTITION_RAID:
+			return bsd_data->raid;
+
+		case PED_PARTITION_LVM:
+			return bsd_data->lvm;
+
+		default:
+			;
+	}
 	return 0;
 }
 
@@ -471,7 +527,14 @@ static int
 bsd_partition_is_flag_available (const PedPartition* part,
 				 PedPartitionFlag flag)
 {
-	/* no flags for bsd */
+	switch (flag) {
+		case PED_PARTITION_BOOT:
+		case PED_PARTITION_RAID:
+		case PED_PARTITION_LVM:
+			return 1;
+		default:
+			;
+	}
 	return 0;
 }