[OpenWrt-Devel] [PATCH mountd 1/2] hfs+ journal partition support as read only

olivier.hardouin at gmail.com olivier.hardouin at gmail.com
Wed Jun 22 03:51:18 EDT 2016


use hfsplus driver to mount hfs+ partition marked as journalled,
read only mounting since partial support from the kernel for write 
access (as stated in Documentatiom/filesystems/hfsplus.txt)
add new index 'LASTFS' to be used in case of support for another
driver

Signed-off-by: Olivier Hardouin <olivier.hardouin at gmail.com>
---
 fs.c         |  4 ++--
 include/fs.h | 25 ++++++++++++++-----------
 mount.c      | 16 +++++++++++-----
 3 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/fs.c b/fs.c
index fee6608..ca77a76 100644
--- a/fs.c
+++ b/fs.c
@@ -153,8 +153,8 @@ static int detect_hfsplus(int fd)
 	{
 		if(!journal)
 			ret = HFSPLUS;
-	//	else
-	//		ret = HFSPLUSJOURNAL;
+		else
+			ret = HFSPLUSJOURNAL;
 	}
 out:
 	free(buffer);
diff --git a/include/fs.h b/include/fs.h
index 1c66db3..b86f383 100644
--- a/include/fs.h
+++ b/include/fs.h
@@ -1,13 +1,16 @@
-#define NONE		-1
-#define MBR			2
-#define EXT2		3
-#define EXT3		4
-#define FAT			5
-#define HFSPLUS		6
-#define EFI			7
-#define NTFS		8
-#define EXTENDED	9
-#define EXFAT		10
-#define EXT4		11
+#define NONE			-1
+#define MBR				2
+#define EXT2			3
+#define EXT3			4
+#define FAT				5
+#define HFSPLUS			6
+#define EFI				7
+#define NTFS			8
+#define EXTENDED		9
+#define EXFAT			10
+#define EXT4			11
+#define HFSPLUSJOURNAL	12
+
+#define LASTFS			HFSPLUSJOURNAL
 
 int detect_fs(char *device);
diff --git a/mount.c b/mount.c
index 219146b..0c2862a 100644
--- a/mount.c
+++ b/mount.c
@@ -60,7 +60,8 @@ char *fs_names[] = {
 	"ntfs",
 	"",
 	"exfat",
-	"ext4"
+	"ext4",
+	"hfsplusjournal"
 };
 
 #define MAX_MOUNTED		32
@@ -100,7 +101,7 @@ static void mount_dump_uci_state(void)
 		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 <= EXT4)
+		if(q->fs > MBR && q->fs <= LASTFS)
 		{
 			snprintf(t, 64, "fs%d", atoi(&q->dev[3]));
 			ucix_add_option(ctx, mountd, q->serial, t, fs_names[q->fs]);
@@ -138,7 +139,7 @@ static void mount_add_list(char *name, char *dev, char *serial,
 {
 	struct mount *mount;
 	char tmp[64], tmp2[64];
-	if(fs <= MBR || fs > EXT4)
+	if(fs <= MBR || fs > LASTFS)
 		return;
 	mount  = malloc(sizeof(struct mount));
 	INIT_LIST_HEAD(&mount->list);
@@ -154,7 +155,7 @@ static void mount_add_list(char *name, char *dev, char *serial,
 	mount->mounted = 0;
 	mount->fs = fs;
 	list_add(&mount->list, &mounts);
-	if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= EXT4))
+	if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= LASTFS))
 	{
 		log_printf("new mount : %s -> %s (%s)\n", name, dev, fs_names[mount->fs]);
 		snprintf(tmp, 64, "%s%s", uci_path, name);
@@ -260,12 +261,17 @@ int mount_new(char *path, char *dev)
 			options = "rw,defaults,uid=1000,gid=1000";
 			fstype = "hfsplus";
 		}
+		if(mount->fs == HFSPLUSJOURNAL)
+		{
+			options = "ro,defaults,uid=1000,gid=1000";
+			fstype = "hfsplus";
+		}
 		if(mount->fs == NTFS)
 		{
 			options = "force";
 			fstype = "ntfs-3g";
 		}
-		if(mount->fs > MBR && mount->fs <= EXT4)
+		if(mount->fs > MBR && mount->fs <= LASTFS)
 		{
 			struct uci_context *ctx;
 			char *uci_options, *uci_fstype;
-- 
1.9.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list