chiark / gitweb /
[PATCH] update volume_id
[elogind.git] / extras / volume_id / volume_id.h
index 2f20244c7c7de615a7cf8e4169c5870429149438..c6f52bec41010d195371fde0108e6bb8dc664aa4 100644 (file)
 #ifndef _VOLUME_ID_H_
 #define _VOLUME_ID_H_
 
-#define VOLUME_ID_VERSION              002
+#define VOLUME_ID_VERSION              25
 
-#define VOLUME_ID_LABEL_SIZE           32
+#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 {
-       char            label_raw[VOLUME_ID_LABEL_SIZE];
-       size_t          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;
+       unsigned char   label_raw[VOLUME_ID_LABEL_SIZE];
+       unsigned int    label_raw_len;
+       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;
-       char            *sbbuf;
-       size_t          sbbuf_len;
-       char            *seekbuf;
-       size_t          seekbuf_off;
-       size_t          seekbuf_len;
+       unsigned char   *sbbuf;
+       unsigned int    sbbuf_len;
+       unsigned char   *seekbuf;
+       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);