@@ -131,10 +131,42 @@ static int diskpart_set_partition(struct fdisk_partition *pa,
return ret;
}
+static void diskpart_partition_info(struct fdisk_context *cxt, const char *name, struct fdisk_partition *pa)
+{
+ struct fdisk_label *lb;
+ int *ids = NULL;
+ size_t nids = 0;
+ size_t i;
+ lb = fdisk_get_label(cxt, NULL);
+ fdisk_label_get_fields_ids_all(lb, cxt, &ids, &nids);
+ if (ids && lb) {
+ TRACE("%s:", name);
+ for (i = 0; i < nids; i++) {
+ const struct fdisk_field *field =
+ fdisk_label_get_field(lb, ids[i]);
+ char *data = NULL;
+ if (!field)
+ continue;
+ if (fdisk_partition_to_string(pa, cxt, ids[i], &data))
+ continue;
+ TRACE("\t%s: %s", fdisk_field_get_name(field), data);
+ free(data);
+ }
+ } else {
+ if (!ids)
+ ERROR("Failed to load field ids");
+ if (!lb)
+ ERROR("Failed to load label");
+ }
+ if (ids)
+ free(ids);
+}
+
/*
* Return true if partition differs
*/
-static bool diskpart_partition_cmp(const char *lbtype, struct fdisk_partition *firstpa, struct fdisk_partition *secondpa)
+static bool diskpart_partition_cmp(const char *lbtype, struct fdisk_context *cxt,
+ struct fdisk_partition *firstpa, struct fdisk_partition *secondpa)
{
if (!firstpa || !secondpa)
return true;
@@ -151,11 +183,9 @@ static bool diskpart_partition_cmp(const char *lbtype, struct fdisk_partition *f
fdisk_parttype_get_code(fdisk_partition_get_type(firstpa)) !=
fdisk_parttype_get_code(fdisk_partition_get_type(secondpa))) ||
fdisk_partition_get_size(firstpa) != fdisk_partition_get_size(secondpa))) {
- TRACE("Partition differ : %s(%llu) <--> %s(%llu)",
- fdisk_partition_get_name (firstpa) ? fdisk_partition_get_name(firstpa) : "",
- (long long unsigned)fdisk_partition_get_size(firstpa),
- fdisk_partition_get_name(secondpa) ? fdisk_partition_get_name(secondpa) : "",
- (long long unsigned)fdisk_partition_get_size(secondpa));
+ TRACE("Partition differ:");
+ diskpart_partition_info(cxt, "Original", firstpa);
+ diskpart_partition_info(cxt, "New", secondpa);
return true;
}
return false;
@@ -394,7 +424,7 @@ static int diskpart(struct img_type *img,
ret = -EFAULT;
goto handler_exit;
}
- if (diskpart_partition_cmp(lbtype, pa, newpa)) {
+ if (diskpart_partition_cmp(lbtype, cxt, pa, newpa)) {
createtable = true;
}
Signed-off-by: James Hilliard <james.hilliard1@gmail.com> --- handlers/diskpart_handler.c | 44 +++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-)