aboutsummaryrefslogtreecommitdiffstats
path: root/lib/blkid
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2008-01-27 00:21:07 -0500
committerTheodore Ts'o <tytso@mit.edu>2008-01-27 00:21:07 -0500
commit69d742284d083c8f6ce7d9240019e21f2fbd9ed5 (patch)
treed14fec2544e3e237a3faaa37efa89ac7c6831fc1 /lib/blkid
parent4dc30dac2c2732e25765984263a3ecafd8c66932 (diff)
downloadandroid_external_e2fsprogs-69d742284d083c8f6ce7d9240019e21f2fbd9ed5.tar.gz
android_external_e2fsprogs-69d742284d083c8f6ce7d9240019e21f2fbd9ed5.tar.bz2
android_external_e2fsprogs-69d742284d083c8f6ce7d9240019e21f2fbd9ed5.zip
blkid: Add support for HFS+ detection
From SLES 10 patch: e2fsprogs-blkid_probe_hfsplus.patch Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'lib/blkid')
-rw-r--r--lib/blkid/probe.c15
-rw-r--r--lib/blkid/probe.h42
2 files changed, 57 insertions, 0 deletions
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 9bde7942..492a36a2 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -881,6 +881,19 @@ static int probe_gfs2(struct blkid_probe *probe,
return 1;
}
+static int probe_hfsplus(struct blkid_probe *probe,
+ struct blkid_magic *id __BLKID_ATTR((unused)),
+ unsigned char *buf)
+{
+ struct hfs_mdb *sbd = (struct hfs_mdb *)buf;
+
+ /* Check for a HFS+ volume embedded in a HFS volume */
+ if (memcmp(sbd->embed_sig, "H+", 2) == 0)
+ return 0;
+
+ return 1;
+}
+
/*
* BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined
* in the type_array table below + bim_kbalign.
@@ -940,6 +953,8 @@ static struct blkid_magic type_array[] = {
{ "iso9660", 32, 1, 5, "CD001", probe_iso9660 },
{ "iso9660", 32, 9, 5, "CDROM", probe_iso9660 },
{ "jfs", 32, 0, 4, "JFS1", probe_jfs },
+ { "hfsplus", 1, 0, 2, "BD", probe_hfsplus },
+ { "hfsplus", 1, 0, 2, "H+", 0 },
{ "hfs", 1, 0, 2, "BD", 0 },
{ "ufs", 8, 0x55c, 4, "T\031\001\000", 0 },
{ "hpfs", 8, 0, 4, "I\350\225\371", 0 },
diff --git a/lib/blkid/probe.h b/lib/blkid/probe.h
index 2cbd617b..acfe1195 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -490,6 +490,48 @@ struct file_attribute {
#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));
+
+
/*
* Byte swap functions
*/