X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=extras%2Fvolume_id%2Fvolume_id%2Freiserfs.c;h=e6677015defa7cf113593492d595c7e526093deb;hb=2d8af104e0262554be2bf2cbbaa752bee6f1a65a;hp=094062dba20c1e8f329cce4dcee6cfd65c669099;hpb=8d1b4df2192915dc94442c1ef3327a28a57b3615;p=elogind.git diff --git a/extras/volume_id/volume_id/reiserfs.c b/extras/volume_id/volume_id/reiserfs.c index 094062dba..e6677015d 100644 --- a/extras/volume_id/volume_id/reiserfs.c +++ b/extras/volume_id/volume_id/reiserfs.c @@ -33,7 +33,6 @@ #include #include #include -#include #include "volume_id.h" #include "logging.h" @@ -41,52 +40,59 @@ #include "reiserfs.h" struct reiserfs_super_block { - __u32 blocks_count; - __u32 free_blocks; - __u32 root_block; - __u32 journal_block; - __u32 journal_dev; - __u32 orig_journal_size; - __u32 dummy2[5]; - __u16 blocksize; - __u16 dummy3[3]; - __u8 magic[12]; - __u32 dummy4[5]; - __u8 uuid[16]; - __u8 label[16]; + uint32_t blocks_count; + uint32_t free_blocks; + uint32_t root_block; + uint32_t journal_block; + uint32_t journal_dev; + uint32_t orig_journal_size; + uint32_t dummy2[5]; + uint16_t blocksize; + uint16_t dummy3[3]; + uint8_t magic[12]; + uint32_t dummy4[5]; + uint8_t uuid[16]; + uint8_t label[16]; } __attribute__((__packed__)); struct reiser4_super_block { - __u8 magic[16]; - __u16 dummy[2]; - __u8 uuid[16]; - __u8 label[16]; - __u64 dummy2; + uint8_t magic[16]; + uint16_t dummy[2]; + uint8_t uuid[16]; + uint8_t label[16]; + uint64_t dummy2; } __attribute__((__packed__)); #define REISERFS1_SUPERBLOCK_OFFSET 0x2000 #define REISERFS_SUPERBLOCK_OFFSET 0x10000 -int volume_id_probe_reiserfs(struct volume_id *id, __u64 off) +int volume_id_probe_reiserfs(struct volume_id *id, uint64_t off) { struct reiserfs_super_block *rs; struct reiser4_super_block *rs4; - __u8 *buf; + uint8_t *buf; - dbg("probing at offset %llu", off); + dbg("probing at offset 0x%llx", (unsigned long long) off); buf = volume_id_get_buffer(id, off + REISERFS_SUPERBLOCK_OFFSET, 0x200); if (buf == NULL) return -1; rs = (struct reiserfs_super_block *) buf;; + if (memcmp(rs->magic, "ReIsErFs", 8) == 0) { + strcpy(id->type_version, "3.5"); + id->type = "reiserfs"; + goto found; + } if (memcmp(rs->magic, "ReIsEr2Fs", 9) == 0) { strcpy(id->type_version, "3.6"); - goto found_v3; + id->type = "reiserfs"; + goto found_label; } if (memcmp(rs->magic, "ReIsEr3Fs", 9) == 0) { strcpy(id->type_version, "JR"); - goto found_v3; + id->type = "reiserfs"; + goto found_label; } rs4 = (struct reiser4_super_block *) buf; @@ -95,28 +101,30 @@ int volume_id_probe_reiserfs(struct volume_id *id, __u64 off) volume_id_set_label_raw(id, rs4->label, 16); volume_id_set_label_string(id, rs4->label, 16); volume_id_set_uuid(id, rs4->uuid, UUID_DCE); + id->type = "reiser4"; goto found; } - rs = (struct reiserfs_super_block *) volume_id_get_buffer(id, off + REISERFS1_SUPERBLOCK_OFFSET, 0x200); - if (rs == NULL) + buf = volume_id_get_buffer(id, off + REISERFS1_SUPERBLOCK_OFFSET, 0x200); + if (buf == NULL) return -1; + rs = (struct reiserfs_super_block *) buf; if (memcmp(rs->magic, "ReIsErFs", 8) == 0) { strcpy(id->type_version, "3.5"); - goto found_v3; + id->type = "reiserfs"; + goto found; } return -1; -found_v3: +found_label: volume_id_set_label_raw(id, rs->label, 16); volume_id_set_label_string(id, rs->label, 16); volume_id_set_uuid(id, rs->uuid, UUID_DCE); found: volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); - id->type = "reiserfs"; return 0; }