summaryrefslogtreecommitdiffstats
path: root/libfdisk/src/fdiskP.h
diff options
context:
space:
mode:
authorKarel Zak2012-11-30 16:31:04 +0100
committerKarel Zak2013-03-11 11:20:40 +0100
commita8019843ab545040e0a64719014f5dcbd35ea8b0 (patch)
tree6945040d2c05706a9cc8223a9c363bb495bab758 /libfdisk/src/fdiskP.h
parentfdisk: use debug stuff from libfdisk (diff)
downloadkernel-qcow2-util-linux-a8019843ab545040e0a64719014f5dcbd35ea8b0.tar.gz
kernel-qcow2-util-linux-a8019843ab545040e0a64719014f5dcbd35ea8b0.tar.xz
kernel-qcow2-util-linux-a8019843ab545040e0a64719014f5dcbd35ea8b0.zip
libfdisk: add basic structs
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/fdiskP.h')
-rw-r--r--libfdisk/src/fdiskP.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h
index 534916610..82443453a 100644
--- a/libfdisk/src/fdiskP.h
+++ b/libfdisk/src/fdiskP.h
@@ -84,4 +84,109 @@ extern int fdisk_debug_mask;
# define DBG_FLUSH do { ; } while(0)
#endif
+typedef unsigned long long sector_t;
+
+/*
+ * Supported partition table types (labels)
+ */
+enum fdisk_labeltype {
+ FDISK_DISKLABEL_DOS = 1,
+ FDISK_DISKLABEL_SUN = 2,
+ FDISK_DISKLABEL_SGI = 4,
+ FDISK_DISKLABEL_AIX = 8,
+ FDISK_DISKLABEL_OSF = 16,
+ FDISK_DISKLABEL_MAC = 32,
+ FDISK_DISKLABEL_GPT = 64,
+ FDISK_DISKLABEL_ANY = -1
+};
+
+/*
+ * Partition types
+ */
+struct fdisk_parttype {
+ unsigned int type; /* type as number or zero */
+ const char *name; /* description */
+ char *typestr; /* type as string or NULL */
+
+ unsigned int flags; /* FDISK_PARTTYPE_* flags */
+};
+
+enum {
+ FDISK_PARTTYPE_UNKNOWN = (1 << 1),
+ FDISK_PARTTYPE_INVISIBLE = (1 << 2),
+ FDISK_PARTTYPE_ALLOCATED = (1 << 3)
+};
+
+#define fdisk_parttype_is_unknown(_x) ((_x) && ((_x)->flags & FDISK_PARTTYPE_UNKNONW))
+#define fdisk_parttype_is_invisible(_x) ((_x) && ((_x)->flags & FDISK_PARTTYPE_INVISIBLE))
+#define fdisk_parttype_is_allocated(_x) ((_x) && ((_x)->flags & FDISK_PARTTYPE_ALLOCATED))
+
+/*
+ * Legacy CHS based geometry
+ */
+struct fdisk_geometry {
+ unsigned int heads;
+ sector_t sectors;
+ sector_t cylinders;
+};
+
+struct fdisk_context {
+ int dev_fd; /* device descriptor */
+ char *dev_path; /* device path */
+ unsigned char *firstsector; /* buffer with master boot record */
+
+ /* topology */
+ unsigned long io_size; /* I/O size used by fdisk */
+ unsigned long optimal_io_size; /* optional I/O returned by device */
+ unsigned long min_io_size; /* minimal I/O size */
+ unsigned long phy_sector_size; /* physical size */
+ unsigned long sector_size; /* logical size */
+ unsigned long alignment_offset;
+
+ enum fdisk_labeltype disklabel; /* current disklabel */
+
+ /* alignment */
+ unsigned long grain; /* alignment unit */
+ sector_t first_lba; /* recommended begin of the first partition */
+
+ /* geometry */
+ sector_t total_sectors; /* in logical sectors */
+ struct fdisk_geometry geom;
+
+ /* label operations and description */
+ const struct fdisk_label *label;
+};
+
+#define fdisk_is_disklabel(c, x) fdisk_dev_is_disklabel(c, FDISK_DISKLABEL_ ## x)
+
+/*
+ * Label specific operations
+ */
+struct fdisk_label {
+ const char *name;
+
+ /* 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);
+};
+
#endif /* _LIBFDISK_PRIVATE_H */