 -
 +#include <linux/types.h>
  #define cpu_to_be32(x) __cpu_to_be32(x)	/* Needed by romfs_fs.h */
-
- #include "romfs_fs.h"
-@@ -37,6 +37,12 @@
- #include "ocfs2_fs.h"
- #include "nilfs_fs.h"
-
+ 
+ #include "btrfs.h"
+@@ -38,6 +38,12 @@
+ #include "squashfs_fs.h"
+ #include "xfs_sb.h"
+ 
 +#if __BYTE_ORDER == __BIG_ENDIAN
 +#include <linux/byteorder/big_endian.h>
 +#else

 /*
  * Slightly cleaned up version of jfs_superblock to
  * avoid pulling in other kernel header files.
@@ -59,6 +65,27 @@
 /* Swap needs the definition of block size */
 #include "swap_fs.h"

+static int jffs2_image(const unsigned char *buf, unsigned long *blocks)
+{
+       // Very sloppy! ;-E
+       if (*buf == 0x85 && buf[1] == 0x19)
+               return 1;
+
+       return 0;
+}
+
+static int vfat_image(const unsigned char *buf, unsigned long *blocks)
+{
+        const struct romfs_super_block *sb =
+               (const struct romfs_super_block *)buf;
+       if (!strncmp(buf + 54, "FAT12   ", 8)
+           || !strncmp(buf + 54, "FAT16   ", 8)
+           || !strncmp(buf + 82, "FAT32   ", 8))
+               return 1;
+
+       return 0;
+}
+
 static int gzip_image(const void *buf, unsigned long long *bytes)
 {277 304
	const unsigned char *p = buf;
@@ -490,6 +517,8 @@
	{1, "ext3", ext3_image},
	{1, "ext2", ext2_image},
	{1, "minix", minix_image},
+	{0, "jffs2", jffs2_image},
+	{0, "vfat", vfat_image},
	{1, "nilfs2", nilfs2_image},
	{2, "ocfs2", ocfs2_image},
	{8, "reiserfs", reiserfs_image},

Index: klibc-1.5.21/usr/kinit/fstype/fstype.c
===================================================================
--- a/usr/kinit/fstype/fstype.c
+++ b/usr/kinit/fstype/fstype.c
@@ -20,7 +20,7 @@
 #include <netinet/in.h>
 #include <sys/utsname.h>
