#ifndef _VOLUME_ID_H_
#define _VOLUME_ID_H_
-#define VOLUME_ID_VERSION 004
+#define VOLUME_ID_VERSION 26
#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,
+ VOLUME_ID_HPTRAID,
+};
-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;
};
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);