[syslinux:master] hdt: Dumping disks partitions

syslinux-bot for Erwan Velu erwanaliasr1 at gmail.com
Mon Apr 25 15:28:23 PDT 2011


Commit-ID:  3fd82f86c1484f61d91669a3e9b407ff4de50918
Gitweb:     http://syslinux.zytor.com/commit/3fd82f86c1484f61d91669a3e9b407ff4de50918
Author:     Erwan Velu <erwanaliasr1 at gmail.com>
AuthorDate: Fri, 25 Mar 2011 22:36:28 +0100
Committer:  Erwan Velu <erwanaliasr1 at gmail.com>
CommitDate: Fri, 25 Mar 2011 22:36:28 +0100

hdt: Dumping disks partitions



---
 com32/hdt/hdt-dump-disks.c |   83 ++++++++++++++++++++++++++++++++++++-------
 com32/hdt/hdt-dump.h       |   10 +++--
 2 files changed, 75 insertions(+), 18 deletions(-)

diff --git a/com32/hdt/hdt-dump-disks.c b/com32/hdt/hdt-dump-disks.c
index ad729b2..a8e856f 100644
--- a/com32/hdt/hdt-dump-disks.c
+++ b/com32/hdt/hdt-dump-disks.c
@@ -30,7 +30,50 @@
 #include "hdt-dump.h"
 #include "hdt-util.h"
 
-void show_disk(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item, int drive) {
+ZZJSON_CONFIG *config;
+ZZJSON **item;
+
+static void show_partition_information(struct driveinfo *drive_info,
+                                       struct part_entry *ptab,
+                                       int partition_offset,
+                                       int nb_partitions_seen) {
+    char size[11] = {0};
+    char bootloader_name[9] = {0};
+    char ostype[64]={0};
+    char *parttype;
+    unsigned int start, end;
+    bool bootable = false;
+
+    int i = nb_partitions_seen;
+    start = partition_offset;
+    end = start + ptab->length - 1;
+
+    if (ptab->length > 0)
+        sectors_to_size(ptab->length, size);
+
+    get_label(ptab->ostype, &parttype);
+    get_bootloader_string(drive_info, ptab, bootloader_name, 9);
+    if (ptab->active_flag == 0x80)
+	    bootable=true;
+
+    snprintf(ostype,sizeof(ostype),"%02X",ptab->ostype);
+
+    APPEND_ARRAY
+	    add_ai("partition->number",i)
+	    add_ai("partition->sector_start",start)
+	    add_ai("partition->sector_end",end)
+	    add_as("partition->size",size)
+	    add_as("partition->type",parttype)
+	    add_as("partition->os_type",ostype)
+    END_OF_APPEND;
+    free(parttype);
+}
+
+
+
+void show_disk(struct s_hardware *hardware, ZZJSON_CONFIG *conf, ZZJSON **it, int drive) {
+	config=conf;
+	item=it;
 	int i = drive - 0x80;
 	struct driveinfo *d = &hardware->disk_info[i];
 	char mbr_name[50]={0};
@@ -47,20 +90,32 @@ void show_disk(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item
 	zzjson_print(config, *item);
 	zzjson_free(config, *item);
 
-        *item = zzjson_create_object(config, NULL); /* empty object */
-	add_s("disk->number", disk);
-	add_i("disk->cylinders",d->legacy_max_cylinder + 1);
-	add_i("disk->heads",d->legacy_max_head + 1);
-	add_i("disk->sectors_per_track",d->legacy_sectors_per_track);
-	add_s("disk->edd_version",edd_version);
-	add_s("disk->size",disk_size);
-	add_i("disk->bytes_per_sector",(int)d->edd_params.bytes_per_sector);
-	add_i("disk->sectors_per_track",(int)d->edd_params.sectors_per_track);
-	add_s("disk->host_bus",remove_spaces((char *)d->edd_params.host_bus_type));
-	add_s("disk->interface_type",remove_spaces((char *)d->edd_params.interface_type));
-	add_s("disk->mbr_name",mbr_name);
-	add_i("disk->mbr_id",hardware->mbr_ids[i]);
+	CREATE_ARRAY
+		add_as("disk->number",disk) 
+		add_ai("disk->cylinders",d->legacy_max_cylinder +1) 
+		add_ai("disk->heads",d->legacy_max_head +1)
+		add_ai("disk->sectors_per_track",d->legacy_sectors_per_track)
+		add_as("disk->edd_version",edd_version)
+		add_as("disk->size",disk_size)
+		add_ai("disk->bytes_per_sector",(int)d->edd_params.bytes_per_sector)
+		add_ai("disk->sectors_per_track",(int)d->edd_params.sectors_per_track)
+		add_as("disk->host_bus",remove_spaces((char *)d->edd_params.host_bus_type))
+		add_as("disk->interface_type",remove_spaces((char *)d->edd_params.interface_type))
+		add_as("disk->mbr_name",mbr_name)
+		add_ai("disk->mbr_id",hardware->mbr_ids[i])
+	END_OF_ARRAY;
 
+	if (parse_partition_table(d, &show_partition_information)) {
+	        if (errno_disk) { 
+			APPEND_ARRAY
+				add_as("disk->error", "IO Error")
+			END_OF_APPEND;
+		} else  {
+			APPEND_ARRAY
+				add_as("disk->error", "Unrecognized Partition Layout")
+			END_OF_APPEND;
+		}
+	}
 }
 
 void dump_disks(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
diff --git a/com32/hdt/hdt-dump.h b/com32/hdt/hdt-dump.h
index c8eeaeb..577edba 100644
--- a/com32/hdt/hdt-dump.h
+++ b/com32/hdt/hdt-dump.h
@@ -34,12 +34,14 @@
 #include <zzjson/zzjson.h>
 #include "hdt-common.h"
 
-#define ADD_I(value) zzjson_create_number_i(config,value)
-#define ADD_S(value) zzjson_create_string(config,value)
-#define add_ai(name,value) *item = zzjson_array_append(config, *item, zzjson_object_append(config, *item, name, zzjson_create_number_i(config, value)))
+#define APPEND_ARRAY ZZJSON *temp_array; temp_array = zzjson_array_append(config, *item, zzjson_create_object(config,
+#define CREATE_ARRAY *item = zzjson_create_array(config, zzjson_create_object(config, 
+#define add_ai(name,value) name,zzjson_create_number_i(config,value),
+#define add_as(name,value) name,zzjson_create_string(config,value),
+#define END_OF_ARRAY NULL),NULL)
+#define END_OF_APPEND NULL)); *item=temp_array;
 #define add_i(name,value) *item = zzjson_object_append(config, *item, name, zzjson_create_number_i(config, value))
 #define add_s(name,value) *item = zzjson_object_append(config, *item, name, zzjson_create_string(config, value))
-#define add_as(name,value) *item = zzjson_array_append(config, *item, zzjson_object_append(config, *item, name, zzjson_create_string(config, value)))
 #define add_bool_true(name) *item = zzjson_object_append(config, *item, (char *)name, zzjson_create_true(config))
 #define add_bool_false(name) *item = zzjson_object_append(config, *item, (char*)name, zzjson_create_false(config))
 #define add_hi(value) add_i(#value,hardware->value)



More information about the Syslinux-commits mailing list