Whamcloud - gitweb
Add support for the DIR_NLINK feature.
[tools/e2fsprogs.git] / lib / blkid / probe.h
index d418aef..b3cc26b 100644 (file)
 
 struct blkid_magic;
 
-typedef int (*blkid_probe_t)(int fd, blkid_cache cache, blkid_dev dev, 
+#define SB_BUFFER_SIZE         0x11000
+
+struct blkid_probe {
+       int                     fd;
+       blkid_cache             cache;
+       blkid_dev               dev;
+       unsigned char           *sbbuf;
+       size_t                  sb_valid;
+       unsigned char           *buf;
+       size_t                  buf_max;
+};
+
+typedef int (*blkid_probe_t)(struct blkid_probe *probe, 
                             struct blkid_magic *id, unsigned char *buf);
 
 struct blkid_magic {
@@ -53,10 +65,78 @@ struct ext2_super_block {
        __u32           s_feature_ro_compat;
        unsigned char   s_uuid[16];
        char       s_volume_name[16];
+       char    s_last_mounted[64];
+       __u32   s_algorithm_usage_bitmap;
+       __u8    s_prealloc_blocks;
+       __u8    s_prealloc_dir_blocks;
+       __u16   s_reserved_gdt_blocks;
+       __u8    s_journal_uuid[16];
+       __u32   s_journal_inum;
+       __u32   s_journal_dev;
+       __u32   s_last_orphan;
+       __u32   s_hash_seed[4];
+       __u8    s_def_hash_version;
+       __u8    s_jnl_backup_type;
+       __u16   s_reserved_word_pad;
+       __u32   s_default_mount_opts;
+       __u32   s_first_meta_bg;
+       __u32   s_mkfs_time;
+       __u32   s_jnl_blocks[17];
+       __u32   s_blocks_count_hi;
+       __u32   s_r_blocks_count_hi;
+       __u32   s_free_blocks_hi;
+       __u16   s_min_extra_isize;
+       __u16   s_want_extra_isize;
+       __u32   s_flags;
+       __u16   s_raid_stride;
+       __u16   s_mmp_interval;
+       __u64   s_mmp_block;
+       __u32   s_raid_stripe_width;
+       __u32   s_reserved[163];
 };
-#define EXT3_FEATURE_COMPAT_HAS_JOURNAL                0x00000004
-#define EXT3_FEATURE_INCOMPAT_RECOVER          0x00000004
-#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV      0x00000008
+
+/* for s_flags */
+#define EXT2_FLAGS_TEST_FILESYS                0x0004
+
+/* for s_feature_compat */
+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL                0x0004
+
+/* for s_feature_ro_compat */
+#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE      0x0002
+#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR       0x0004
+#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE       0x0008
+#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM                0x0010
+#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK       0x0020
+#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE     0x0040
+
+/* for s_feature_incompat */
+#define EXT2_FEATURE_INCOMPAT_FILETYPE         0x0002
+#define EXT3_FEATURE_INCOMPAT_RECOVER          0x0004
+#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV      0x0008
+#define EXT2_FEATURE_INCOMPAT_META_BG          0x0010
+#define EXT4_FEATURE_INCOMPAT_EXTENTS          0x0040 /* extents support */
+#define EXT4_FEATURE_INCOMPAT_64BIT            0x0080
+#define EXT4_FEATURE_INCOMPAT_MMP              0x0100
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG          0x0200
+
+#define EXT2_FEATURE_RO_COMPAT_SUPP    (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
+#define EXT2_FEATURE_INCOMPAT_SUPP     (EXT2_FEATURE_INCOMPAT_FILETYPE| \
+                                        EXT2_FEATURE_INCOMPAT_META_BG)
+#define EXT2_FEATURE_INCOMPAT_UNSUPPORTED      ~EXT2_FEATURE_INCOMPAT_SUPP
+#define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED     ~EXT2_FEATURE_RO_COMPAT_SUPP
+
+#define EXT3_FEATURE_RO_COMPAT_SUPP    (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
+#define EXT3_FEATURE_INCOMPAT_SUPP     (EXT2_FEATURE_INCOMPAT_FILETYPE| \
+                                        EXT3_FEATURE_INCOMPAT_RECOVER| \
+                                        EXT2_FEATURE_INCOMPAT_META_BG)
+#define EXT3_FEATURE_INCOMPAT_UNSUPPORTED      ~EXT3_FEATURE_INCOMPAT_SUPP
+#define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED     ~EXT3_FEATURE_RO_COMPAT_SUPP
+
 
 struct xfs_super_block {
        unsigned char   xs_magic[4];
@@ -89,6 +169,14 @@ struct reiserfs_super_block {
        char            rs_label[16];
 };
 
+struct reiser4_super_block {
+       unsigned char   rs4_magic[16];
+       __u16           rs4_dummy[2];
+       unsigned char   rs4_uuid[16];
+       unsigned char   rs4_label[16];
+       __u64           rs4_dummy2;
+};
+
 struct jfs_super_block {
        unsigned char   js_magic[4];
        __u32           js_version;
@@ -108,6 +196,32 @@ struct romfs_super_block {
        unsigned char   ros_volume[16];
 };
 
+struct cramfs_super_block {
+       __u8            magic[4];
+       __u32           size;
+       __u32           flags;
+       __u32           future;
+       __u8            signature[16];
+       struct cramfs_info {
+               __u32           crc;
+               __u32           edition;
+               __u32           blocks;
+               __u32           files;
+       } info;
+       __u8            name[16];
+};
+
+struct swap_id_block {
+/*     unsigned char   sws_boot[1024]; */
+       __u32           sws_version;
+       __u32           sws_lastpage;
+       __u32           sws_nrbad;
+       unsigned char   sws_uuid[16];
+       char            sws_volume[16];
+       unsigned char   sws_pad[117];
+       __u32           sws_badpg;
+};
+
 /* Yucky misaligned values */
 struct vfat_super_block {
 /* 00*/        unsigned char   vs_ignored[3];
@@ -133,7 +247,7 @@ struct vfat_super_block {
 /* 34*/        __u16           vs_reserved2[6];
 /* 40*/        unsigned char   vs_unknown[3];
 /* 43*/        unsigned char   vs_serno[4];
-/* 47*/        char            vs_label[11];
+/* 47*/        unsigned char   vs_label[11];
 /* 52*/        unsigned char   vs_magic[8];
 /* 5a*/        unsigned char   vs_dummy2[164];
 /*1fe*/        unsigned char   vs_pmagic[2];
@@ -157,12 +271,31 @@ struct msdos_super_block {
 /* 20*/        __u32           ms_total_sect;
 /* 24*/        unsigned char   ms_unknown[3];
 /* 27*/        unsigned char   ms_serno[4];
-/* 2b*/        char            ms_label[11];
+/* 2b*/        unsigned char   ms_label[11];
 /* 36*/        unsigned char   ms_magic[8];
 /* 3d*/        unsigned char   ms_dummy2[192];
 /*1fe*/        unsigned char   ms_pmagic[2];
 };
 
+struct vfat_dir_entry {
+       __u8    name[11];
+       __u8    attr;
+       __u16   time_creat;
+       __u16   date_creat;
+       __u16   time_acc;
+       __u16   date_acc;
+       __u16   cluster_high;
+       __u16   time_write;
+       __u16   date_write;
+       __u16   cluster_low;
+       __u32   size;
+};
+
+/* maximum number of clusters */
+#define FAT12_MAX 0xFF4
+#define FAT16_MAX 0xFFF4
+#define FAT32_MAX 0x0FFFFFF6
+
 struct minix_super_block {
        __u16           ms_ninodes;
        __u16           ms_nzones;
@@ -176,14 +309,6 @@ struct minix_super_block {
        __u32           ms_zones;
 };
 
-struct swap_header {
-       char            sh_bootbits[1024];
-       unsigned int    sh_version;
-       unsigned int    sh_last_page;
-       unsigned int    sh_nr_badpages;
-       char            sh_label[16];
-};
-
 struct mdp_superblock_s {
        __u32 md_magic;
        __u32 major_version;
@@ -209,14 +334,218 @@ struct hfs_super_block {
        __u32   h_blksize;
 };
 
-#define ISODCL(from, to) (to - from + 1)
+struct ocfs_volume_header {
+       unsigned char   minor_version[4];
+       unsigned char   major_version[4];
+       unsigned char   signature[128];
+       char            mount[128];
+       unsigned char   mount_len[2];
+};
+
+struct ocfs_volume_label {
+       unsigned char   disk_lock[48];
+       char            label[64];      
+       unsigned char   label_len[2];
+       unsigned char  vol_id[16];
+       unsigned char  vol_id_len[2];
+};
+
+#define ocfsmajor(o) ((__u32)o.major_version[0] \
+                   + (((__u32) o.major_version[1]) << 8) \
+                   + (((__u32) o.major_version[2]) << 16) \
+                   + (((__u32) o.major_version[3]) << 24))
+#define ocfslabellen(o)        ((__u32)o.label_len[0] + (((__u32) o.label_len[1]) << 8))
+#define ocfsmountlen(o)        ((__u32)o.mount_len[0] + (((__u32) o.mount_len[1])<<8))
+
+#define OCFS_MAGIC "OracleCFS"
+
+struct ocfs2_super_block {
+       unsigned char  signature[8];
+       unsigned char  s_dummy1[184];
+       unsigned char  s_dummy2[80];
+       char           s_label[64];
+       unsigned char  s_uuid[16];
+};
+
+#define OCFS2_MIN_BLOCKSIZE             512
+#define OCFS2_MAX_BLOCKSIZE             4096
+
+#define OCFS2_SUPER_BLOCK_BLKNO         2
+
+#define OCFS2_SUPER_BLOCK_SIGNATURE     "OCFSV2"
+
+struct oracle_asm_disk_label {
+       char dummy[32];
+       char dl_tag[8];
+       char dl_id[24];
+};
+
+#define ORACLE_ASM_DISK_LABEL_MARKED    "ORCLDISK"
+#define ORACLE_ASM_DISK_LABEL_OFFSET    32
+
 struct iso_volume_descriptor {
-       char type[ISODCL(1,1)]; /* 711 */
-       char id[ISODCL(2,6)];
-       char version[ISODCL(7,7)];
-       char data[ISODCL(8,2048)];
+       unsigned char   vd_type;
+       unsigned char   vd_id[5];
+       unsigned char   vd_version;
+       unsigned char   flags;
+       unsigned char   system_id[32];
+       unsigned char   volume_id[32];
+       unsigned char   unused[8];
+       unsigned char   space_size[8];
+       unsigned char   escape_sequences[8];
 };
 
+/* Common gfs/gfs2 constants: */
+#define GFS_MAGIC               0x01161970
+#define GFS_DEFAULT_BSIZE       4096
+#define GFS_SUPERBLOCK_OFFSET  (0x10 * GFS_DEFAULT_BSIZE)
+#define GFS_METATYPE_SB         1
+#define GFS_FORMAT_SB           100
+#define GFS_LOCKNAME_LEN        64
+
+/* gfs1 constants: */
+#define GFS_FORMAT_FS           1309
+#define GFS_FORMAT_MULTI        1401
+/* gfs2 constants: */
+#define GFS2_FORMAT_FS          1801
+#define GFS2_FORMAT_MULTI       1900
+
+struct gfs2_meta_header {
+       __u32 mh_magic;
+       __u32 mh_type;
+       __u64 __pad0;          /* Was generation number in gfs1 */
+       __u32 mh_format;
+       __u32 __pad1;          /* Was incarnation number in gfs1 */
+};
+
+struct gfs2_inum {
+       __u64 no_formal_ino;
+       __u64 no_addr;
+};
+
+struct gfs2_sb {
+       struct gfs2_meta_header sb_header;
+
+       __u32 sb_fs_format;
+       __u32 sb_multihost_format;
+       __u32  __pad0;  /* Was superblock flags in gfs1 */
+       
+       __u32 sb_bsize;
+       __u32 sb_bsize_shift;
+       __u32 __pad1;   /* Was journal segment size in gfs1 */
+       
+       struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */
+       struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */
+       struct gfs2_inum sb_root_dir;
+       
+       char sb_lockproto[GFS_LOCKNAME_LEN];
+       char sb_locktable[GFS_LOCKNAME_LEN];
+       /* In gfs1, quota and license dinodes followed */
+};
+
+struct ntfs_super_block {
+       __u8    jump[3];
+       __u8    oem_id[8];
+       __u8    bios_parameter_block[25];
+       __u16   unused[2];
+       __u64   number_of_sectors;
+       __u64   mft_cluster_location;
+       __u64   mft_mirror_cluster_location;
+       __s8    cluster_per_mft_record;
+       __u8    reserved1[3];
+       __s8    cluster_per_index_record;
+       __u8    reserved2[3];
+       __u64   volume_serial;
+       __u16   checksum;
+};
+
+struct master_file_table_record {
+       __u32   magic;
+       __u16   usa_ofs;
+       __u16   usa_count;
+       __u64   lsn;
+       __u16   sequence_number;
+       __u16   link_count;
+       __u16   attrs_offset;
+       __u16   flags;
+       __u32   bytes_in_use;
+       __u32   bytes_allocated;
+} __attribute__((__packed__));
+
+struct file_attribute {
+       __u32   type;
+       __u32   len;
+       __u8    non_resident;
+       __u8    name_len;
+       __u16   name_offset;
+       __u16   flags;
+       __u16   instance;
+       __u32   value_len;
+       __u16   value_offset;
+} __attribute__((__packed__));
+
+#define MFT_RECORD_VOLUME                      3
+#define MFT_RECORD_ATTR_VOLUME_NAME            0x60
+#define MFT_RECORD_ATTR_VOLUME_INFO            0x70
+#define MFT_RECORD_ATTR_OBJECT_ID              0x40
+#define MFT_RECORD_ATTR_END                    0xffffffffu
+
+/* HFS / HFS+ */
+struct hfs_finder_info {
+        __u32        boot_folder;
+        __u32        start_app;
+        __u32        open_folder;
+        __u32        os9_folder;
+        __u32        reserved;
+        __u32        osx_folder;
+        __u8         id[8];
+} __attribute__((packed));
+
+struct hfs_mdb {
+        __u8         signature[2];
+        __u32        cr_date;
+        __u32        ls_Mod;
+        __u16        atrb;
+        __u16        nm_fls;
+        __u16        vbm_st;
+        __u16        alloc_ptr;
+        __u16        nm_al_blks;
+        __u32        al_blk_size;
+        __u32        clp_size;
+        __u16        al_bl_st;
+        __u32        nxt_cnid;
+        __u16        free_bks;
+        __u8         label_len;
+        __u8         label[27];
+        __u32        vol_bkup;
+        __u16        vol_seq_num;
+        __u32        wr_cnt;
+        __u32        xt_clump_size;
+        __u32        ct_clump_size;
+        __u16        num_root_dirs;
+        __u32        file_count;
+        __u32        dir_count;
+        struct hfs_finder_info finder_info;
+        __u8         embed_sig[2];
+        __u16        embed_startblock;
+        __u16        embed_blockcount;
+} __attribute__((packed));
+
+/* this is lvm's label_header & pv_header combined. */
+
+#define LVM2_ID_LEN 32
+
+struct lvm2_pv_label_header {
+       /* label_header */
+       __u8    id[8];          /* LABELONE */
+       __u64   sector_xl;      /* Sector number of this label */
+       __u32   crc_xl;         /* From next field to end of sector */
+       __u32   offset_xl;      /* Offset from start of struct to contents */
+       __u8    type[8];        /* LVM2 001 */
+       /* pv_header */
+       __u8    pv_uuid[LVM2_ID_LEN];
+} __attribute__ ((packed));
+
 /*
  * Byte swap functions
  */
@@ -286,7 +615,7 @@ _INLINE_ __u64 blkid_swab64(__u64 val)
 
 
 
-#if  __BYTE_ORDER == __BIG_ENDIAN
+#ifdef WORDS_BIGENDIAN
 #define blkid_le16(x) blkid_swab16(x)
 #define blkid_le32(x) blkid_swab32(x)
 #define blkid_le64(x) blkid_swab64(x)