diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2006-02-21 19:15:17 +0000 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2006-02-21 19:15:17 +0000 |
commit | 415acaf90654948932b95dd2f8bd517c54963459 (patch) | |
tree | e69cc440dd7a61e9160b532c1449c6bbd77b90d5 | |
parent | 74c8f6bafd6bd66194ddb1f0ba203721bd0f0ed9 (diff) | |
download | hal-415acaf90654948932b95dd2f8bd517c54963459.tar.gz |
Sync volume_id with udev version.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | volume_id/cramfs.c | 6 | ||||
-rw-r--r-- | volume_id/ext.c | 2 | ||||
-rw-r--r-- | volume_id/fat.c | 10 | ||||
-rw-r--r-- | volume_id/hfs.c | 16 | ||||
-rw-r--r-- | volume_id/highpoint.c | 4 | ||||
-rw-r--r-- | volume_id/hpfs.c | 2 | ||||
-rw-r--r-- | volume_id/iso9660.c | 4 | ||||
-rw-r--r-- | volume_id/isw_raid.c | 2 | ||||
-rw-r--r-- | volume_id/jfs.c | 2 | ||||
-rw-r--r-- | volume_id/linux_raid.c | 2 | ||||
-rw-r--r-- | volume_id/linux_swap.c | 2 | ||||
-rw-r--r-- | volume_id/lsi_raid.c | 2 | ||||
-rw-r--r-- | volume_id/lvm.c | 4 | ||||
-rw-r--r-- | volume_id/mac.c | 11 | ||||
-rw-r--r-- | volume_id/minix.c | 2 | ||||
-rw-r--r-- | volume_id/msdos.c | 2 | ||||
-rw-r--r-- | volume_id/ntfs.c | 8 | ||||
-rw-r--r-- | volume_id/nvidia_raid.c | 2 | ||||
-rw-r--r-- | volume_id/ocfs.c | 8 | ||||
-rw-r--r-- | volume_id/promise_raid.c | 2 | ||||
-rw-r--r-- | volume_id/reiserfs.c | 4 | ||||
-rw-r--r-- | volume_id/romfs.c | 2 | ||||
-rw-r--r-- | volume_id/silicon_raid.c | 2 | ||||
-rw-r--r-- | volume_id/sysv.c | 4 | ||||
-rw-r--r-- | volume_id/udf.c | 14 | ||||
-rw-r--r-- | volume_id/ufs.c | 18 | ||||
-rw-r--r-- | volume_id/via_raid.c | 4 | ||||
-rw-r--r-- | volume_id/volume_id.c | 97 | ||||
-rw-r--r-- | volume_id/volume_id.h | 8 | ||||
-rw-r--r-- | volume_id/vxfs.c | 2 | ||||
-rw-r--r-- | volume_id/xfs.c | 2 |
32 files changed, 145 insertions, 109 deletions
@@ -1,3 +1,7 @@ +2006-02-21 Kay Sievers <kay.sievers@vrfy.org> + + Sync volume_id with udev version. + 2006-02-19 David Zeuthen <davidz@redhat.com> * hald/hald_dbus.c (hald_exec_method_free_mi): New function diff --git a/volume_id/cramfs.c b/volume_id/cramfs.c index 0ad5886b..e099c214 100644 --- a/volume_id/cramfs.c +++ b/volume_id/cramfs.c @@ -38,9 +38,9 @@ struct cramfs_super { uint32_t edition; uint32_t blocks; uint32_t files; - } __attribute__((__packed__)) info; + } PACKED info; uint8_t name[16]; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_cramfs(struct volume_id *id, uint64_t off) { @@ -52,7 +52,7 @@ int volume_id_probe_cramfs(struct volume_id *id, uint64_t off) if (cs == NULL) return -1; - if (memcmp(cs->magic, "\x45\x3d\xcd\x28", 4) == 0) { + if (memcmp(cs->magic, "\x45\x3d\xcd\x28", 4) == 0 || memcmp(cs->magic, "\x28\xcd\x3d\x45", 4) == 0) { volume_id_set_label_raw(id, cs->name, 16); volume_id_set_label_string(id, cs->name, 16); diff --git a/volume_id/ext.c b/volume_id/ext.c index d1f62dfb..26ac98bc 100644 --- a/volume_id/ext.c +++ b/volume_id/ext.c @@ -61,7 +61,7 @@ struct ext2_super_block { uint32_t s_feature_ro_compat; uint8_t s_uuid[16]; uint8_t s_volume_name[16]; -} __attribute__((__packed__)); +} PACKED; #define EXT_SUPER_MAGIC 0xEF53 #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x00000004 diff --git a/volume_id/fat.c b/volume_id/fat.c index cea5b8cf..a72ec19f 100644 --- a/volume_id/fat.c +++ b/volume_id/fat.c @@ -58,7 +58,7 @@ struct vfat_super_block { uint8_t magic[8]; uint8_t dummy2[192]; uint8_t pmagic[2]; - } __attribute__((__packed__)) fat; + } PACKED fat; struct fat32_super_block { uint32_t fat32_length; uint16_t flags; @@ -73,9 +73,9 @@ struct vfat_super_block { uint8_t magic[8]; uint8_t dummy2[164]; uint8_t pmagic[2]; - } __attribute__((__packed__)) fat32; - } __attribute__((__packed__)) type; -} __attribute__((__packed__)); + } PACKED fat32; + } PACKED type; +} PACKED; struct vfat_dir_entry { uint8_t name[11]; @@ -89,7 +89,7 @@ struct vfat_dir_entry { uint16_t date_write; uint16_t cluster_low; uint32_t size; -} __attribute__((__packed__)); +} PACKED; static uint8_t *get_attr_volume_id(struct vfat_dir_entry *dir, unsigned int count) { diff --git a/volume_id/hfs.c b/volume_id/hfs.c index 27a8ac99..09194d5b 100644 --- a/volume_id/hfs.c +++ b/volume_id/hfs.c @@ -35,7 +35,7 @@ struct hfs_finder_info{ uint32_t reserved; uint32_t osx_folder; uint8_t id[8]; -} __attribute__((__packed__)); +} PACKED; struct hfs_mdb { uint8_t signature[2]; @@ -65,7 +65,7 @@ struct hfs_mdb { uint8_t embed_sig[2]; uint16_t embed_startblock; uint16_t embed_blockcount; -} __attribute__((__packed__)) *hfs; +} PACKED *hfs; struct hfsplus_bnode_descriptor { uint32_t next; @@ -74,7 +74,7 @@ struct hfsplus_bnode_descriptor { uint8_t height; uint16_t num_recs; uint16_t reserved; -} __attribute__((__packed__)); +} PACKED; struct hfsplus_bheader_record { uint16_t depth; @@ -83,19 +83,19 @@ struct hfsplus_bheader_record { uint32_t leaf_head; uint32_t leaf_tail; uint16_t node_size; -} __attribute__((__packed__)); +} PACKED; struct hfsplus_catalog_key { uint16_t key_len; uint32_t parent_id; uint16_t unicode_len; uint8_t unicode[255 * 2]; -} __attribute__((__packed__)); +} PACKED; struct hfsplus_extent { uint32_t start_block; uint32_t block_count; -} __attribute__((__packed__)); +} PACKED; #define HFSPLUS_EXTENT_COUNT 8 struct hfsplus_fork { @@ -103,7 +103,7 @@ struct hfsplus_fork { uint32_t clump_size; uint32_t total_blocks; struct hfsplus_extent extents[HFSPLUS_EXTENT_COUNT]; -} __attribute__((__packed__)); +} PACKED; struct hfsplus_vol_header { uint8_t signature[2]; @@ -132,7 +132,7 @@ struct hfsplus_vol_header { struct hfsplus_fork cat_file; struct hfsplus_fork attr_file; struct hfsplus_fork start_file; -} __attribute__((__packed__)) *hfsplus; +} PACKED *hfsplus; #define HFS_SUPERBLOCK_OFFSET 0x400 #define HFS_NODE_LEAF 0xff diff --git a/volume_id/highpoint.c b/volume_id/highpoint.c index 721b7ab2..78a4ad82 100644 --- a/volume_id/highpoint.c +++ b/volume_id/highpoint.c @@ -30,11 +30,11 @@ struct hpt37x_meta { uint8_t filler1[32]; uint32_t magic; -} __attribute__((packed)); +} PACKED; struct hpt45x_meta { uint32_t magic; -} __attribute__((packed)); +} PACKED; #define HPT37X_CONFIG_OFF 0x1200 #define HPT37X_MAGIC_OK 0x5a7816f0 diff --git a/volume_id/hpfs.c b/volume_id/hpfs.c index 52cb47be..452df012 100644 --- a/volume_id/hpfs.c +++ b/volume_id/hpfs.c @@ -31,7 +31,7 @@ struct hpfs_super { uint8_t magic[4]; uint8_t version; -} __attribute__((__packed__)); +} PACKED; #define HPFS_SUPERBLOCK_OFFSET 0x2000 diff --git a/volume_id/iso9660.c b/volume_id/iso9660.c index b6654cec..2e28af8d 100644 --- a/volume_id/iso9660.c +++ b/volume_id/iso9660.c @@ -45,14 +45,14 @@ struct iso_volume_descriptor { uint8_t unused[8]; uint8_t space_size[8]; uint8_t escape_sequences[8]; -} __attribute__((__packed__)); +} PACKED; struct high_sierra_volume_descriptor { uint8_t foo[8]; uint8_t type; uint8_t id[4]; uint8_t version; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_iso9660(struct volume_id *id, uint64_t off) { diff --git a/volume_id/isw_raid.c b/volume_id/isw_raid.c index 1f49959f..72b2b85b 100644 --- a/volume_id/isw_raid.c +++ b/volume_id/isw_raid.c @@ -33,7 +33,7 @@ struct isw_meta { uint32_t mpb_size; uint32_t family_num; uint32_t generation_num; -} __attribute__((packed)); +} PACKED; #define ISW_SIGNATURE "Intel Raid ISM Cfg Sig. " diff --git a/volume_id/jfs.c b/volume_id/jfs.c index b6ae9624..78b61fb3 100644 --- a/volume_id/jfs.c +++ b/volume_id/jfs.c @@ -38,7 +38,7 @@ struct jfs_super_block { uint8_t uuid[16]; uint8_t label[16]; uint8_t loguuid[16]; -} __attribute__((__packed__)); +} PACKED; #define JFS_SUPERBLOCK_OFFSET 0x8000 diff --git a/volume_id/linux_raid.c b/volume_id/linux_raid.c index d90510a8..2285e87b 100644 --- a/volume_id/linux_raid.c +++ b/volume_id/linux_raid.c @@ -44,7 +44,7 @@ struct mdp_super_block { uint32_t set_uuid1; uint32_t set_uuid2; uint32_t set_uuid3; -} __attribute__((packed)) *mdp; +} PACKED *mdp; #define MD_RESERVED_BYTES 0x10000 #define MD_MAGIC 0xa92b4efc diff --git a/volume_id/linux_swap.c b/volume_id/linux_swap.c index 18928b83..b4828347 100644 --- a/volume_id/linux_swap.c +++ b/volume_id/linux_swap.c @@ -34,7 +34,7 @@ struct swap_header_v1_2 { uint32_t nr_badpages; uint8_t uuid[16]; uint8_t volume_name[16]; -} __attribute__((__packed__)) *sw; +} PACKED *sw; #define LARGEST_PAGESIZE 0x4000 diff --git a/volume_id/lsi_raid.c b/volume_id/lsi_raid.c index 2720de76..efa79257 100644 --- a/volume_id/lsi_raid.c +++ b/volume_id/lsi_raid.c @@ -29,7 +29,7 @@ struct lsi_meta { uint8_t sig[6]; -} __attribute__((packed)); +} PACKED; #define LSI_SIGNATURE "$XIDE$" diff --git a/volume_id/lvm.c b/volume_id/lvm.c index 65098625..074660b1 100644 --- a/volume_id/lvm.c +++ b/volume_id/lvm.c @@ -29,7 +29,7 @@ struct lvm1_super_block { uint8_t id[2]; -} __attribute__((packed)); +} PACKED; struct lvm2_super_block { uint8_t id[8]; @@ -37,7 +37,7 @@ struct lvm2_super_block { uint32_t crc_xl; uint32_t offset_xl; uint8_t type[8]; -} __attribute__((packed)); +} PACKED; #define LVM1_SB_OFF 0x400 #define LVM1_MAGIC "HM" diff --git a/volume_id/mac.c b/volume_id/mac.c index 99bcbde6..78ef9fc8 100644 --- a/volume_id/mac.c +++ b/volume_id/mac.c @@ -31,7 +31,7 @@ struct mac_driver_desc { uint8_t signature[2]; uint16_t block_size; uint32_t block_count; -} __attribute__((__packed__)); +} PACKED; struct mac_partition { uint8_t signature[2]; @@ -41,7 +41,7 @@ struct mac_partition { uint32_t block_count; uint8_t name[32]; uint8_t type[32]; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_mac_partition_map(struct volume_id *id, uint64_t off) { @@ -84,14 +84,15 @@ int volume_id_probe_mac_partition_map(struct volume_id *id, uint64_t off) part_count = be32_to_cpu(part->map_count); dbg("expecting %d partition entries", part_count); + if (part_count < 1 || part_count > 256) + return -1; if (id->partitions != NULL) free(id->partitions); - id->partitions = - malloc(part_count * sizeof(struct volume_id_partition)); + id->partitions = malloc(part_count * sizeof(struct volume_id_partition)); if (id->partitions == NULL) return -1; - memset(id->partitions, 0x00, sizeof(struct volume_id_partition)); + memset(id->partitions, 0x00, part_count * sizeof(struct volume_id_partition)); id->partition_count = part_count; diff --git a/volume_id/minix.c b/volume_id/minix.c index ca57745f..fefba8e7 100644 --- a/volume_id/minix.c +++ b/volume_id/minix.c @@ -39,7 +39,7 @@ struct minix_super_block uint16_t s_magic; uint16_t s_state; uint32_t s_zones; -} __attribute__((__packed__)); +} PACKED; #define MINIX_SUPERBLOCK_OFFSET 0x400 diff --git a/volume_id/msdos.c b/volume_id/msdos.c index a6604605..ca3801a8 100644 --- a/volume_id/msdos.c +++ b/volume_id/msdos.c @@ -38,7 +38,7 @@ struct msdos_partition_entry { uint8_t end_cyl; uint32_t start_sect; uint32_t nr_sects; -} __attribute__((packed)); +} PACKED; #define MSDOS_MAGIC "\x55\xaa" #define MSDOS_PARTTABLE_OFFSET 0x1be diff --git a/volume_id/ntfs.c b/volume_id/ntfs.c index de9ad6d6..fe9ff8d5 100644 --- a/volume_id/ntfs.c +++ b/volume_id/ntfs.c @@ -52,7 +52,7 @@ struct ntfs_super_block { uint8_t reserved2[3]; uint8_t volume_serial[8]; uint16_t checksum; -} __attribute__((__packed__)) *ns; +} PACKED *ns; struct master_file_table_record { uint8_t magic[4]; @@ -65,7 +65,7 @@ struct master_file_table_record { uint16_t flags; uint32_t bytes_in_use; uint32_t bytes_allocated; -} __attribute__((__packed__)) *mftr; +} PACKED *mftr; struct file_attribute { uint32_t type; @@ -77,13 +77,13 @@ struct file_attribute { uint16_t instance; uint32_t value_len; uint16_t value_offset; -} __attribute__((__packed__)) *attr; +} PACKED *attr; struct volume_info { uint64_t reserved; uint8_t major_ver; uint8_t minor_ver; -} __attribute__((__packed__)) *info; +} PACKED *info; #define MFT_RECORD_VOLUME 3 #define MFT_RECORD_ATTR_VOLUME_NAME 0x60 diff --git a/volume_id/nvidia_raid.c b/volume_id/nvidia_raid.c index 3b967e69..24717aaa 100644 --- a/volume_id/nvidia_raid.c +++ b/volume_id/nvidia_raid.c @@ -32,7 +32,7 @@ struct nvidia_meta { uint32_t size; uint32_t chksum; uint16_t version; -} __attribute__((packed)); +} PACKED; #define NVIDIA_SIGNATURE "NVIDIA" diff --git a/volume_id/ocfs.c b/volume_id/ocfs.c index faf89bd3..c2f8360c 100644 --- a/volume_id/ocfs.c +++ b/volume_id/ocfs.c @@ -56,7 +56,7 @@ struct ocfs1_super_block_header { uint64_t new_cfg_off; uint32_t prot_bits; int32_t excl_mount; -} __attribute__((__packed__)); +} PACKED; struct ocfs1_super_block_label { struct ocfs1_disk_lock { @@ -69,14 +69,14 @@ struct ocfs1_super_block_label { uint32_t reader_node_num; uint64_t oin_node_map; uint64_t dlock_seq_num; - } disk_lock __attribute__((__packed__)); + } PACKED disk_lock; uint8_t label[64]; uint16_t label_len; uint8_t vol_id[16]; uint16_t vol_id_len; uint8_t cluster_name[64]; uint16_t cluster_name_len; -} __attribute__((__packed__)); +} PACKED; struct ocfs2_super_block { uint8_t i_signature[8]; @@ -125,7 +125,7 @@ struct ocfs2_super_block { uint64_t s_first_cluster_group; uint8_t s_label[64]; uint8_t s_uuid[16]; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_ocfs1(struct volume_id *id, uint64_t off) { diff --git a/volume_id/promise_raid.c b/volume_id/promise_raid.c index 6611aeab..bdf0c7b6 100644 --- a/volume_id/promise_raid.c +++ b/volume_id/promise_raid.c @@ -29,7 +29,7 @@ struct promise_meta { uint8_t sig[24]; -} __attribute__((packed)); +} PACKED; #define PDC_CONFIG_OFF 0x1200 #define PDC_SIGNATURE "Promise Technology, Inc." diff --git a/volume_id/reiserfs.c b/volume_id/reiserfs.c index 0eecbda5..91a5bcb9 100644 --- a/volume_id/reiserfs.c +++ b/volume_id/reiserfs.c @@ -42,7 +42,7 @@ struct reiserfs_super_block { uint32_t dummy4[5]; uint8_t uuid[16]; uint8_t label[16]; -} __attribute__((__packed__)); +} PACKED; struct reiser4_super_block { uint8_t magic[16]; @@ -50,7 +50,7 @@ struct reiser4_super_block { uint8_t uuid[16]; uint8_t label[16]; uint64_t dummy2; -} __attribute__((__packed__)); +} PACKED; #define REISERFS1_SUPERBLOCK_OFFSET 0x2000 #define REISERFS_SUPERBLOCK_OFFSET 0x10000 diff --git a/volume_id/romfs.c b/volume_id/romfs.c index 51ef3739..456077d1 100644 --- a/volume_id/romfs.c +++ b/volume_id/romfs.c @@ -32,7 +32,7 @@ struct romfs_super { uint32_t size; uint32_t checksum; uint8_t name[0]; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_romfs(struct volume_id *id, uint64_t off) { diff --git a/volume_id/silicon_raid.c b/volume_id/silicon_raid.c index a3077647..27ac9591 100644 --- a/volume_id/silicon_raid.c +++ b/volume_id/silicon_raid.c @@ -44,7 +44,7 @@ struct silicon_meta { uint16_t vendor_id; uint16_t minor_ver; uint16_t major_ver; -} __attribute__((packed)); +} PACKED; #define SILICON_MAGIC 0x2F000000 diff --git a/volume_id/sysv.c b/volume_id/sysv.c index fc874d5b..4aa281e9 100644 --- a/volume_id/sysv.c +++ b/volume_id/sysv.c @@ -56,7 +56,7 @@ struct sysv_super uint32_t s_state; uint32_t s_magic; uint32_t s_type; -} __attribute__((__packed__)); +} PACKED; #define XENIX_NICINOD 100 #define XENIX_NICFREE 100 @@ -82,7 +82,7 @@ struct xenix_super { uint8_t s_fill[371]; uint32_t s_magic; uint32_t s_type; -} __attribute__((__packed__)); +} PACKED; #define SYSV_SUPERBLOCK_BLOCK 0x01 #define SYSV_MAGIC 0xfd187e20 diff --git a/volume_id/udf.c b/volume_id/udf.c index fede1ce6..f0e0d419 100644 --- a/volume_id/udf.c +++ b/volume_id/udf.c @@ -37,28 +37,28 @@ struct volume_descriptor { uint16_t crc; uint16_t crc_len; uint32_t location; - } __attribute__((__packed__)) tag; + } PACKED tag; union { struct anchor_descriptor { uint32_t length; uint32_t location; - } __attribute__((__packed__)) anchor; + } PACKED anchor; struct primary_descriptor { uint32_t seq_num; uint32_t desc_num; struct dstring { uint8_t clen; uint8_t c[31]; - } __attribute__((__packed__)) ident; - } __attribute__((__packed__)) primary; - } __attribute__((__packed__)) type; -} __attribute__((__packed__)); + } PACKED ident; + } PACKED primary; + } PACKED type; +} PACKED; struct volume_structure_descriptor { uint8_t type; uint8_t id[5]; uint8_t version; -} __attribute__((__packed__)); +} PACKED; #define UDF_VSD_OFFSET 0x8000 diff --git a/volume_id/ufs.c b/volume_id/ufs.c index ace61db6..2351d1f9 100644 --- a/volume_id/ufs.c +++ b/volume_id/ufs.c @@ -80,7 +80,7 @@ struct ufs_super_block { uint32_t cs_nbfree; uint32_t cs_nifree; uint32_t cs_nffree; - } __attribute__((__packed__)) fs_cstotal; + } PACKED fs_cstotal; int8_t fs_fmod; int8_t fs_clean; int8_t fs_ronly; @@ -93,7 +93,7 @@ struct ufs_super_block { uint32_t fs_maxcluster; uint32_t fs_cpc; uint16_t fs_opostbl[16][8]; - } __attribute__((__packed__)) fs_u1; + } PACKED fs_u1; struct { int8_t fs_fsmnt[468]; uint8_t fs_volname[32]; @@ -116,17 +116,17 @@ struct ufs_super_block { uint64_t cs_nffree; uint64_t cs_numclusters; uint64_t cs_spare[3]; - } __attribute__((__packed__)) fs_cstotal; + } PACKED fs_cstotal; struct ufs_timeval { int32_t tv_sec; int32_t tv_usec; - } __attribute__((__packed__)) fs_time; + } PACKED fs_time; int64_t fs_size; int64_t fs_dsize; uint64_t fs_csaddr; int64_t fs_pendingblocks; int32_t fs_pendinginodes; - } __attribute__((__packed__)) fs_u2; + } PACKED fs_u2; } fs_u11; union { struct { @@ -136,7 +136,7 @@ struct ufs_super_block { int32_t fs_state; uint32_t fs_qbmask[2]; uint32_t fs_qfmask[2]; - } __attribute__((__packed__)) fs_sun; + } PACKED fs_sun; struct { int32_t fs_sparecon[53]; int32_t fs_reclaim; @@ -144,7 +144,7 @@ struct ufs_super_block { uint32_t fs_npsect; uint32_t fs_qbmask[2]; uint32_t fs_qfmask[2]; - } __attribute__((__packed__)) fs_sunx86; + } PACKED fs_sunx86; struct { int32_t fs_sparecon[50]; int32_t fs_contigsumsize; @@ -154,7 +154,7 @@ struct ufs_super_block { uint32_t fs_qbmask[2]; uint32_t fs_qfmask[2]; int32_t fs_state; - } __attribute__((__packed__)) fs_44; + } PACKED fs_44; } fs_u2; int32_t fs_postblformat; int32_t fs_nrpos; @@ -162,7 +162,7 @@ struct ufs_super_block { int32_t fs_rotbloff; uint32_t fs_magic; uint8_t fs_space[1]; -} __attribute__((__packed__)); +} PACKED; #define UFS_MAGIC 0x00011954 #define UFS2_MAGIC 0x19540119 diff --git a/volume_id/via_raid.c b/volume_id/via_raid.c index 66962cd7..375a2097 100644 --- a/volume_id/via_raid.c +++ b/volume_id/via_raid.c @@ -36,10 +36,10 @@ struct via_meta { uint32_t capacity_low; uint32_t capacity_high; uint32_t serial_checksum; - } __attribute((packed)) array; + } PACKED array; uint32_t serial_checksum[8]; uint8_t checksum; -} __attribute__((packed)); +} PACKED; #define VIA_SIGNATURE 0xAA55 diff --git a/volume_id/volume_id.c b/volume_id/volume_id.c index 09d1e317..6a900ab2 100644 --- a/volume_id/volume_id.c +++ b/volume_id/volume_id.c @@ -31,7 +31,7 @@ #include "util.h" -int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size) +int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size) { if (id == NULL) return -EINVAL; @@ -39,113 +39,138 @@ int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size) /* probe for raid first, cause fs probes may be successful on raid members */ if (size) { if (volume_id_probe_linux_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_intel_software_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_lsi_mega_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_via_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_silicon_medley_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_nvidia_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_promise_fasttrack_raid(id, off, size) == 0) - goto exit; + goto found; if (volume_id_probe_highpoint_45x_raid(id, off, size) == 0) - goto exit; + goto found; } if (volume_id_probe_lvm1(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_lvm2(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_highpoint_37x_raid(id, off) == 0) - goto exit; + goto found; + + return -1; + +found: + /* If recognized, we free the allocated buffers */ + volume_id_free_buffer(id); + return 0; +} + +int volume_id_probe_filesystem(struct volume_id *id, uint64_t off, uint64_t size) +{ + if (id == NULL) + return -EINVAL; if (volume_id_probe_luks(id, off) == 0) - goto exit; + goto found; /* signature in the first block, only small buffer needed */ if (volume_id_probe_vfat(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_xfs(id, off) == 0) - goto exit; + goto found; /* fill buffer with maximum */ volume_id_get_buffer(id, 0, SB_BUFFER_SIZE); if (volume_id_probe_linux_swap(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_ext(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_reiserfs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_jfs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_udf(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_iso9660(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_hfs_hfsplus(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_ufs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_ntfs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_cramfs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_romfs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_hpfs(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_sysv(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_minix(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_ocfs1(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_ocfs2(id, off) == 0) - goto exit; + goto found; if (volume_id_probe_vxfs(id, off) == 0) - goto exit; + goto found; return -1; -exit: - /* If the filestystem in recognized, we free the allocated buffers, - otherwise they will stay in place for the possible next probe call */ +found: + /* If recognized, we free the allocated buffers */ volume_id_free_buffer(id); - return 0; } +int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size) +{ + if (id == NULL) + return -EINVAL; + + if (volume_id_probe_raid(id, off, size) == 0) + return 0; + + if (volume_id_probe_filesystem(id, off, size) == 0) + return 0; + + return -1; +} + /* open volume by already open file descriptor */ struct volume_id *volume_id_open_fd(int fd) { diff --git a/volume_id/volume_id.h b/volume_id/volume_id.h index ad65fe54..78baf598 100644 --- a/volume_id/volume_id.h +++ b/volume_id/volume_id.h @@ -14,7 +14,11 @@ #include <stdint.h> #include <stddef.h> -#define VOLUME_ID_VERSION 55 +#define VOLUME_ID_VERSION 58 + +#ifndef PACKED +#define PACKED __attribute__((packed)) +#endif #define VOLUME_ID_LABEL_SIZE 64 #define VOLUME_ID_UUID_SIZE 36 @@ -69,6 +73,8 @@ struct volume_id { extern struct volume_id *volume_id_open_fd(int fd); extern struct volume_id *volume_id_open_node(const char *path); extern int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size); +extern int volume_id_probe_filesystem(struct volume_id *id, uint64_t off, uint64_t size); +extern int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size); extern void volume_id_close(struct volume_id *id); /* filesystems */ diff --git a/volume_id/vxfs.c b/volume_id/vxfs.c index 0aef3698..883c1266 100644 --- a/volume_id/vxfs.c +++ b/volume_id/vxfs.c @@ -32,7 +32,7 @@ struct vxfs_super { uint32_t vs_magic; int32_t vs_version; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_vxfs(struct volume_id *id, uint64_t off) { diff --git a/volume_id/xfs.c b/volume_id/xfs.c index a5f5d843..934ed2d8 100644 --- a/volume_id/xfs.c +++ b/volume_id/xfs.c @@ -40,7 +40,7 @@ struct xfs_super_block { uint64_t icount; uint64_t ifree; uint64_t fdblocks; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_xfs(struct volume_id *id, uint64_t off) { |