diff options
author | Karel Zak | 2012-12-11 12:56:27 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 12:47:29 +0100 |
commit | 0c5d095e46306ed4d6009f56e0339857d733d72e (patch) | |
tree | ea751328b6a158c199c7595faf3200a8039dd176 /libfdisk/src/fdiskP.h | |
parent | libfdisk: cleanup the rest of fdisks/utils.c stuff (diff) | |
download | kernel-qcow2-util-linux-0c5d095e46306ed4d6009f56e0339857d733d72e.tar.gz kernel-qcow2-util-linux-0c5d095e46306ed4d6009f56e0339857d733d72e.tar.xz kernel-qcow2-util-linux-0c5d095e46306ed4d6009f56e0339857d733d72e.zip |
libfdisk: split label and label operations
Changes:
- fdisk_label is a private label driver struct
- generic header of the fdisk_label points to fdisk_label_operations
- the private fdisk_label stuff is always allocated for all drivers
during fdisk_context initialization
- context->labels[] contains pointers to all supported labels (drivers)
- context->label is a pointer to the currently used label
This change allows to:
- store label specific global settings (e.g. dos compatible mode,
display units, ...) independently on the current label
- add label specific function to the API
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/fdiskP.h')
-rw-r--r-- | libfdisk/src/fdiskP.h | 85 |
1 files changed, 55 insertions, 30 deletions
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index eac127ee6..01dd71f51 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -118,6 +118,56 @@ struct fdisk_geometry { sector_t cylinders; }; +/* + * Label specific operations + */ +struct fdisk_label_operations { + /* probe disk label */ + int (*probe)(struct fdisk_context *cxt); + /* write in-memory changes to disk */ + int (*write)(struct fdisk_context *cxt); + /* verify the partition table */ + int (*verify)(struct fdisk_context *cxt); + /* create new disk label */ + int (*create)(struct fdisk_context *cxt); + /* new partition */ + int (*part_add)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t); + /* delete partition */ + int (*part_delete)(struct fdisk_context *cxt, int partnum); + /* get partition type */ + struct fdisk_parttype *(*part_get_type)(struct fdisk_context *cxt, int partnum); + /* set partition type */ + int (*part_set_type)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t); + /* refresh alignment setting */ + int (*reset_alignment)(struct fdisk_context *cxt); + + /* free in-memory label stuff */ + void (*free)(struct fdisk_label *lb); +}; + +/* + * Generic label + */ +struct fdisk_label { + const char *name; + + struct fdisk_parttype *parttypes; + size_t nparttypes; /* number of items in parttypes[] */ + + const struct fdisk_label_operations *op; + + struct fdisk_context *cxt; +}; + +/* label allocators */ +extern struct fdisk_label *fdisk_new_gpt_label(struct fdisk_context *cxt); +extern struct fdisk_label *fdisk_new_dos_label(struct fdisk_context *cxt); +extern struct fdisk_label *fdisk_new_aix_label(struct fdisk_context *cxt); +extern struct fdisk_label *fdisk_new_bsd_label(struct fdisk_context *cxt); +extern struct fdisk_label *fdisk_new_mac_label(struct fdisk_context *cxt); +extern struct fdisk_label *fdisk_new_sgi_label(struct fdisk_context *cxt); +extern struct fdisk_label *fdisk_new_sun_label(struct fdisk_context *cxt); + struct fdisk_context { int dev_fd; /* device descriptor */ char *dev_path; /* device path */ @@ -141,39 +191,14 @@ struct fdisk_context { sector_t total_sectors; /* in logical sectors */ struct fdisk_geometry geom; - /* label operations and description */ - const struct fdisk_label *label; -}; + struct fdisk_label *label; /* current label, pointer to labels[] */ -/* - * Label specific operations - */ -struct fdisk_label { - const char *name; + size_t nlabels; /* number of initialized label drivers */ + struct fdisk_label *labels[8]; /* all supported labels, + * FIXME: use any enum rather than hardcoded number */ +}; - /* array with partition types */ - struct fdisk_parttype *parttypes; - size_t nparttypes; /* number of items in parttypes[] */ - /* probe disk label */ - int (*probe)(struct fdisk_context *cxt); - /* write in-memory changes to disk */ - int (*write)(struct fdisk_context *cxt); - /* verify the partition table */ - int (*verify)(struct fdisk_context *cxt); - /* create new disk label */ - int (*create)(struct fdisk_context *cxt); - /* new partition */ - int (*part_add)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t); - /* delete partition */ - int (*part_delete)(struct fdisk_context *cxt, int partnum); - /* get partition type */ - struct fdisk_parttype *(*part_get_type)(struct fdisk_context *cxt, int partnum); - /* set partition type */ - int (*part_set_type)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t); - /* refresh alignment setting */ - int (*reset_alignment)(struct fdisk_context *cxt); -}; /* alignment.c */ extern sector_t fdisk_topology_get_first_lba(struct fdisk_context *cxt); |