X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fvolume_id%2Fvolume_id.h;h=c6f52bec41010d195371fde0108e6bb8dc664aa4;hb=33eae955e24feb2e473b905d64de17ad641e57e0;hp=a939743dc1ec8330367e841a4bf871b6f17a13ef;hpb=b99f344fde90ddc131ea6e2ec8520e018e1274e2;p=elogind.git diff --git a/extras/volume_id/volume_id.h b/extras/volume_id/volume_id.h index a939743dc..c6f52bec4 100644 --- a/extras/volume_id/volume_id.h +++ b/extras/volume_id/volume_id.h @@ -21,42 +21,73 @@ #ifndef _VOLUME_ID_H_ #define _VOLUME_ID_H_ -#define VOLUME_ID_VERSION 004 +#define VOLUME_ID_VERSION 25 #define VOLUME_ID_LABEL_SIZE 64 #define VOLUME_ID_UUID_SIZE 16 #define VOLUME_ID_UUID_STRING_SIZE 37 -#define VOLUME_ID_PATH_MAX 255 +#define VOLUME_ID_FORMAT_SIZE 32 +#define VOLUME_ID_PATH_MAX 256 +#define VOLUME_ID_PARTITIONS_MAX 16 +enum volume_id_usage { + VOLUME_ID_UNUSED, + VOLUME_ID_UNPROBED, + VOLUME_ID_OTHER, + VOLUME_ID_FILESYSTEM, + VOLUME_ID_PARTITIONTABLE, + VOLUME_ID_RAID +}; + +enum volume_id_type { + VOLUME_ID_ALL, + VOLUME_ID_MSDOSPARTTABLE, + VOLUME_ID_MSDOSEXTENDED, + VOLUME_ID_SWAP, + VOLUME_ID_EXT2, + VOLUME_ID_EXT3, + VOLUME_ID_REISERFS, + VOLUME_ID_XFS, + VOLUME_ID_JFS, + VOLUME_ID_VFAT, + VOLUME_ID_UDF, + VOLUME_ID_ISO9660, + VOLUME_ID_NTFS, + VOLUME_ID_MACPARTMAP, + VOLUME_ID_HFS, + VOLUME_ID_HFSPLUS, + VOLUME_ID_UFS, + VOLUME_ID_LINUX_RAID, + VOLUME_ID_LVM1, + VOLUME_ID_LVM2 +}; -enum filesystem_type { - ALL, - EXT2, - EXT3, - REISER, - XFS, - JFS, - MSDOS, - VFAT, - UDF, - ISO9660, - NTFS, - SWAP +struct volume_id_partition { + enum volume_id_usage usage_id; + enum volume_id_type type_id; + char *type; + unsigned long long off; + unsigned long long len; + unsigned int partition_type_raw; }; struct volume_id { unsigned char label_raw[VOLUME_ID_LABEL_SIZE]; unsigned int label_raw_len; - char label_string[VOLUME_ID_LABEL_SIZE+1]; - unsigned char uuid[VOLUME_ID_UUID_SIZE]; - char uuid_string[VOLUME_ID_UUID_STRING_SIZE]; - enum filesystem_type fs_type; - char *fs_name; + char label[VOLUME_ID_LABEL_SIZE+1]; + unsigned char uuid_raw[VOLUME_ID_UUID_SIZE]; + char uuid[VOLUME_ID_UUID_STRING_SIZE]; + enum volume_id_usage usage_id; + enum volume_id_type type_id; + char *type; + char type_version[VOLUME_ID_FORMAT_SIZE]; + struct volume_id_partition *partitions; + unsigned int partition_count; int fd; unsigned char *sbbuf; unsigned int sbbuf_len; unsigned char *seekbuf; - unsigned int seekbuf_off; + unsigned long long seekbuf_off; unsigned int seekbuf_len; int fd_close; }; @@ -71,7 +102,8 @@ extern struct volume_id *volume_id_open_node(const char *path); extern struct volume_id *volume_id_open_dev_t(dev_t devt); /* probe volume for filesystem type and try to read label/uuid */ -extern int volume_id_probe(struct volume_id *id, enum filesystem_type fs_type); +extern int volume_id_probe(struct volume_id *id, enum volume_id_type type, + unsigned long long off, unsigned long long size); /* free allocated device info */ extern void volume_id_close(struct volume_id *id);