diff options
author | Karel Zak | 2012-11-30 16:31:04 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 11:20:40 +0100 |
commit | a8019843ab545040e0a64719014f5dcbd35ea8b0 (patch) | |
tree | 6945040d2c05706a9cc8223a9c363bb495bab758 /libfdisk | |
parent | fdisk: use debug stuff from libfdisk (diff) | |
download | kernel-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')
-rw-r--r-- | libfdisk/src/Makemodule.am | 1 | ||||
-rw-r--r-- | libfdisk/src/fdiskP.h | 105 |
2 files changed, 106 insertions, 0 deletions
diff --git a/libfdisk/src/Makemodule.am b/libfdisk/src/Makemodule.am index a24b8f90d..4b2d0e7f1 100644 --- a/libfdisk/src/Makemodule.am +++ b/libfdisk/src/Makemodule.am @@ -10,6 +10,7 @@ libfdisk_la_SOURCES = \ \ libfdisk/src/init.c + nodist_libfdisk_la_SOURCES = libfdisk/src/fdiskP.h libfdisk_la_LIBADD = libcommon.la 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 */ |