diff options
Diffstat (limited to 'package/mountd/patches/030-ext4_support.patch')
-rw-r--r-- | package/mountd/patches/030-ext4_support.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/package/mountd/patches/030-ext4_support.patch b/package/mountd/patches/030-ext4_support.patch new file mode 100644 index 000000000..7bbaf14ac --- /dev/null +++ b/package/mountd/patches/030-ext4_support.patch @@ -0,0 +1,85 @@ +diff -ruN mountd-0.1.orig/include/fs.h mountd-0.1/include/fs.h +--- mountd-0.1.orig/include/fs.h 2009-10-02 22:57:04.000000000 +0200 ++++ mountd-0.1/include/fs.h 2012-07-08 18:42:32.000000000 +0200 +@@ -7,5 +7,6 @@ + #define EFI 7 + #define NTFS 8 + #define EXTENDED 9 ++#define EXT4 10 + + int detect_fs(char *device); +diff -ruN mountd-0.1.orig/lib/fs.c mountd-0.1/lib/fs.c +--- mountd-0.1.orig/lib/fs.c 2009-10-02 23:26:22.000000000 +0200 ++++ mountd-0.1/lib/fs.c 2012-07-08 19:28:08.000000000 +0200 +@@ -91,9 +91,14 @@ + goto out; + if(get_le_short(buffer + 56) == 0xEF53) + { +- if((get_le_long(buffer + 96) & 0x0008) +- || (get_le_long(buffer + 92) & 0x0004)) +- ret = EXT3; ++ if(get_le_long(buffer + 92) & 0x0004) ++ { ++ if ((get_le_long(buffer + 96) < 0x0000040) ++ && (get_le_long(buffer + 100) < 0x0000008)) ++ ret = EXT3; ++ else ++ ret = EXT4; ++ } + else + ret = EXT2; + } +diff -ruN mountd-0.1.orig/lib/mount.c mountd-0.1/lib/mount.c +--- mountd-0.1.orig/lib/mount.c 2009-10-03 12:54:57.000000000 +0200 ++++ mountd-0.1/lib/mount.c 2012-07-08 19:04:29.000000000 +0200 +@@ -53,7 +53,10 @@ + "EXT3", + "FAT", + "HFSPLUS", +- "NTFS" ++ "", ++ "NTFS", ++ "", ++ "EXT4" + }; + + #define MAX_MOUNTED 32 +@@ -93,7 +96,7 @@ + ucix_add_option(ctx, mountd, q->serial, "rev", q->rev); + snprintf(t, 64, "size%d", atoi(&q->dev[3])); + ucix_add_option(ctx, mountd, q->serial, t, q->size); +- if(q->fs > MBR && q->fs <= NTFS) ++ if(q->fs > MBR && q->fs <= EXT4) + { + snprintf(t, 64, "fs%d", atoi(&q->dev[3])); + ucix_add_option(ctx, mountd, q->serial, t, fs_names[q->fs]); +@@ -131,7 +134,7 @@ + { + struct mount *mount; + char tmp[64], tmp2[64]; +- if(fs <= MBR || fs > NTFS) ++ if(fs <= MBR || fs > EXT4) + return; + mount = malloc(sizeof(struct mount)); + INIT_LIST_HEAD(&mount->list); +@@ -147,7 +150,7 @@ + mount->mounted = 0; + mount->fs = fs; + list_add(&mount->list, &mounts); +- if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= NTFS)) ++ if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= EXT4)) + { + log_printf("new mount : %s -> %s (%s)\n", name, dev, fs_names[mount->fs]); + snprintf(tmp, 64, "%s%s", uci_path, name); +@@ -226,6 +229,11 @@ + log_printf("mount -t vfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp); + ret = system_printf("mount -t vfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp); + } ++ if(mount->fs == EXT4) ++ { ++ log_printf("mount -t ext4 -o rw,defaults /dev/%s %s", mount->dev, tmp); ++ ret = system_printf("mount -t ext4 -o rw,defaults /dev/%s %s", mount->dev, tmp); ++ } + if(mount->fs == EXT3) + { + log_printf("mount -t ext3 -o rw,defaults /dev/%s %s", mount->dev, tmp); |