#ifndef _PART_H_
#define _PART_H_
struct ptable;
enum ptable_type {
PTABLE_NONE,
PTABLE_BSD,
PTABLE_MBR,
PTABLE_GPT,
PTABLE_VTOC8,
PTABLE_VTOC,
PTABLE_ISO9660
};
enum partition_type {
PART_UNKNOWN,
PART_EFI,
PART_FREEBSD,
PART_FREEBSD_BOOT,
PART_FREEBSD_UFS,
PART_FREEBSD_ZFS,
PART_FREEBSD_SWAP,
PART_FREEBSD_VINUM,
PART_LINUX,
PART_LINUX_SWAP,
PART_DOS,
PART_ISO9660,
PART_SOLARIS2,
PART_ILLUMOS_UFS,
PART_ILLUMOS_ZFS,
PART_RESERVED,
PART_VTOC_BOOT,
PART_VTOC_ROOT,
PART_VTOC_SWAP,
PART_VTOC_USR,
PART_VTOC_BACKUP,
PART_VTOC_STAND,
PART_VTOC_VAR,
PART_VTOC_HOME,
PART_APFS
};
struct ptable_entry {
uint64_t start;
uint64_t end;
int index;
enum partition_type type;
};
typedef int (diskread_t)(void *arg, void *buf, size_t blocks, uint64_t offset);
typedef int (ptable_iterate_t)(void *arg, const char *partname,
const struct ptable_entry *part);
struct ptable *ptable_open(void *dev, uint64_t sectors, uint16_t sectorsize,
diskread_t *dread);
void ptable_close(struct ptable *table);
enum ptable_type ptable_gettype(const struct ptable *table);
int ptable_getsize(const struct ptable *table, uint64_t *sizep);
int ptable_getpart(const struct ptable *table, struct ptable_entry *part,
int index);
int ptable_getbestpart(const struct ptable *table, struct ptable_entry *part);
int ptable_iterate(const struct ptable *table, void *arg,
ptable_iterate_t *iter);
const char *parttype2str(enum partition_type type);
#endif