From be96e24194f7bf291f3a1e9c8faa5350708ed60f Mon Sep 17 00:00:00 2001 From: "olivier.hardouin@gmail.com" Date: Wed, 22 Jun 2016 09:51:18 +0200 Subject: [PATCH] hfs+ journal partition support as read only 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 --- 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; -- 2.25.1