[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