aboutsummaryrefslogtreecommitdiffstats
path: root/package/system/mountd/patches/030-ext4_support.patch
blob: 7bbaf14ac91f32e2d8f8bebf677c5ce45b137b48 (plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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);