1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
Index: klibc-1.5/usr/kinit/fstype/fstype.c
===================================================================
--- klibc-1.5.orig/usr/kinit/fstype/fstype.c 2008-02-28 00:48:35.319254938 +0100
+++ klibc-1.5/usr/kinit/fstype/fstype.c 2008-02-28 00:52:20.583257793 +0100
@@ -20,7 +20,7 @@
#include <endian.h>
#include <netinet/in.h>
#include <sys/vfs.h>
-
+#include <linux/types.h>
#define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */
#include "romfs_fs.h"
@@ -33,6 +33,12 @@
#include "lvm2_sb.h"
#include "iso9660_sb.h"
+#if __BYTE_ORDER == __BIG_ENDIAN
+#include <linux/byteorder/big_endian.h>
+#else
+#include <linux/byteorder/little_endian.h>
+#endif
+
/*
* Slightly cleaned up version of jfs_superblock to
* avoid pulling in other kernel header files.
@@ -54,6 +60,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)
{
const unsigned char *p = buf;
@@ -277,6 +304,8 @@
{1, "ext3", ext3_image},
{1, "ext2", ext2_image},
{1, "minix", minix_image},
+ {0, "jffs2", jffs2_image},
+ {0, "vfat", vfat_image},
{8, "reiserfs", reiserfs_image},
{64, "reiserfs", reiserfs_image},
{32, "jfs", jfs_image},
|