aboutsummaryrefslogtreecommitdiffstats
path: root/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/klibc/files/fstype-sane-and-vfat-jffs2.patch')
-rw-r--r--packages/klibc/files/fstype-sane-and-vfat-jffs2.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch b/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch
new file mode 100644
index 0000000000..e89c5adb9a
--- /dev/null
+++ b/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch
@@ -0,0 +1,68 @@
+diff -r 3c9d84425ba7 utils/fstype.c
+--- a/utils/fstype.c Thu Feb 14 02:09:30 2008 +0200
++++ b/utils/fstype.c Thu Feb 14 02:13:46 2008 +0200
+@@ -13,11 +13,18 @@
+ */
+
+ #include <sys/types.h>
++#include <linux/types.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <endian.h>
+ #include <netinet/in.h>
++#if __BYTE_ORDER == __BIG_ENDIAN
++#include <linux/byteorder/big_endian.h>
++#else
++#include <linux/byteorder/little_endian.h>
++#endif
++
+
+ #define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */
+
+@@ -105,6 +112,27 @@ static int romfs_image(const unsigned ch
+ return 0;
+ }
+
++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 minix_image(const unsigned char *buf, unsigned long *blocks)
+ {
+ const struct minix_super_block *sb =
+@@ -167,8 +195,6 @@ static int xfs_image(const unsigned char
+ (const struct xfs_sb *)buf;
+
+ if (__be32_to_cpu(sb->sb_magicnum) == XFS_SB_MAGIC) {
+- *blocks = __be64_to_cpu(sb->sb_dblocks) *
+- (__be32_to_cpu(sb->sb_blocksize) / BLOCK_SIZE);
+ return 1;
+ }
+ return 0;
+@@ -184,6 +210,8 @@ static struct imagetype images[] = {
+ { 0, "gzip", gzip_image },
+ { 0, "cramfs", cramfs_image },
+ { 0, "romfs", romfs_image },
++ { 0, "jffs2", jffs2_image },
++ { 0, "vfat", vfat_image },
+ { 0, "xfs", xfs_image },
+ { 1, "minix", minix_image },
+ { 1, "ext3", ext3_image },