chiark / gitweb /
[PATCH] update udev_volume_id
[elogind.git] / extras / volume_id / volume_id.h
index a939743dc1ec8330367e841a4bf871b6f17a13ef..eb903906178beedf2b8a31fa54f0f77622c47660 100644 (file)
 #ifndef _VOLUME_ID_H_
 #define _VOLUME_ID_H_
 
-#define VOLUME_ID_VERSION              004
+#define VOLUME_ID_VERSION              022
 
 #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;
 };
 
 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 +101,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);