summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2003-04-03 00:04:28 -0500
committerTheodore Ts'o <tytso@mit.edu>2003-04-03 00:04:28 -0500
commit09a2ef8ddab7fed91b9ec8314e0a10e11d3c0323 (patch)
tree148c9012430ca9cfd5f318061efc205c9240eef9
parent6f96325b1ed40509961873c334ae3fca9f29a45b (diff)
downloade2fsprogs-09a2ef8ddab7fed91b9ec8314e0a10e11d3c0323.tar.gz
Fix XFS superblock definition. Add support to
extract UUID and labels for JFS and romfs. (Thanks to Janos Farkas <chexum@acomp.hu>.)
-rw-r--r--lib/blkid/ChangeLog6
-rw-r--r--lib/blkid/probe.c33
-rw-r--r--lib/blkid/probe.h21
3 files changed, 57 insertions, 3 deletions
diff --git a/lib/blkid/ChangeLog b/lib/blkid/ChangeLog
index f34f5184..9e408a23 100644
--- a/lib/blkid/ChangeLog
+++ b/lib/blkid/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-02 Theodore Ts'o <tytso@mit.edu>
+
+ * probe.c, probe.h: Fix XFS superblock definition. Add support to
+ extract UUID and labels for JFS and romfs. (Thanks to
+ Janos Farkas <chexum@acomp.hu>.)
+
2003-03-30 Theodore Ts'o <tytso@mit.edu>
* getsize.c: #include stat.h for the Apple Darwin port
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 2484a5f9..0fbbda37 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -213,6 +213,35 @@ static int probe_reiserfs(int fd, blkid_cache cache, blkid_dev dev,
return 0;
}
+static int probe_jfs(int fd, blkid_cache cache, blkid_dev dev,
+ struct blkid_magic *id, unsigned char *buf)
+{
+ struct jfs_super_block *js;
+
+ js = (struct jfs_super_block *)buf;
+
+ if (strlen(js->js_label))
+ blkid_set_tag(dev, "LABEL", js->js_label,
+ sizeof(js->js_label));
+ set_uuid(dev, js->js_uuid);
+ return 0;
+}
+
+static int probe_romfs(int fd, blkid_cache cache, blkid_dev dev,
+ struct blkid_magic *id, unsigned char *buf)
+{
+ struct romfs_super_block *ros;
+
+ ros = (struct romfs_super_block *)buf;
+
+ /* can be longer, padded to a 16 bytes boundary */
+ if (strlen(ros->ros_volume)) {
+ blkid_set_tag(dev, "LABEL", ros->ros_volume,
+ (strlen(ros->ros_volume)|15)+1);
+ }
+ return 0;
+}
+
/*
* BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined
* in the type_array table below + bim_kbalign.
@@ -248,7 +277,7 @@ static struct blkid_magic type_array[] = {
{ "minix", 1, 0x10, 2, "\170\044", 0 },
{ "vxfs", 1, 0, 4, "\365\374\001\245", 0 },
{ "xfs", 0, 0, 4, "XFSB", probe_xfs },
- { "romfs", 0, 0, 8, "-rom1fs-", 0 },
+ { "romfs", 0, 0, 8, "-rom1fs-", probe_romfs },
{ "bfs", 0, 0, 4, "\316\372\173\033", 0 },
{ "cramfs", 0, 0, 4, "E=\315\034", 0 },
{ "qnx4", 0, 4, 6, "QNX4FS", 0 },
@@ -261,7 +290,7 @@ static struct blkid_magic type_array[] = {
{ "udf", 32, 1, 5, "NSR02", 0 },
{ "udf", 32, 1, 5, "NSR03", 0 },
{ "udf", 32, 1, 5, "TEA01", 0 },
- { "jfs", 32, 0, 4, "JFS1", 0 },
+ { "jfs", 32, 0, 4, "JFS1", probe_jfs },
{ "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 8302b3f4..8ab8d72c 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -63,7 +63,7 @@ struct xfs_super_block {
__u32 xs_blocksize;
__u64 xs_dblocks;
__u64 xs_rblocks;
- __u32 xs_dummy1[8];
+ __u32 xs_dummy1[2];
unsigned char xs_uuid[16];
__u32 xs_dummy2[15];
char xs_fname[12];
@@ -89,6 +89,25 @@ struct reiserfs_super_block {
char rs_label[16];
};
+struct jfs_super_block {
+ unsigned char js_magic[4];
+ __u32 js_version;
+ __u64 js_size;
+ __u32 js_bsize;
+ __u32 js_dummy1;
+ __u32 js_pbsize;
+ __u32 js_dummy2[27];
+ unsigned char js_uuid[16];
+ unsigned char js_label[16];
+ unsigned char js_loguuid[16];
+};
+
+struct romfs_super_block {
+ unsigned char ros_magic[8];
+ __u32 ros_dummy1[2];
+ unsigned char ros_volume[16];
+};
+
/* Yucky misaligned values */
struct vfat_super_block {
/* 00*/ unsigned char vs_ignored[3];