[OpenWrt-Devel] [PATCH mountd] filesystem mount options in uci config
olivier.hardouin at gmail.com
olivier.hardouin at gmail.com
Fri Jun 10 05:18:01 EDT 2016
Move (previously hardcoded) mount option to UCI to allow different configuration
like charset (utf-8 or iso) and filesystem driver (if alternative ones are used).
The fs names are changed in lowercase to comply with UCI general naming.
Signed-off-by: Olivier Hardouin <olivier.hardouin at gmail.com>
---
mount.c | 69 ++++++++++++++++++++++++++---------------------------------------
1 file changed, 28 insertions(+), 41 deletions(-)
diff --git a/mount.c b/mount.c
index 8892040..c8f7ea6 100644
--- a/mount.c
+++ b/mount.c
@@ -51,15 +51,15 @@ struct mount {
char *fs_names[] = {
"",
"",
- "MBR",
- "EXT2",
- "EXT3",
- "FAT",
- "HFSPLUS",
+ "mbr",
+ "ext2",
+ "ext3",
+ "fat",
+ "hfsplus",
"",
- "NTFS",
+ "ntfs",
"",
- "EXT4"
+ "ext4"
};
#define MAX_MOUNTED 32
@@ -227,42 +227,29 @@ int mount_new(char *path, char *dev)
pid = autofs_safe_fork();
if(!pid)
{
- if(mount->fs == EXFAT)
+ if(mount->fs > MBR && mount->fs <= EXT4)
{
- log_printf("mount -t exfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
- ret = system_printf("mount -t exfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
- }
- if(mount->fs == FAT)
- {
- 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);
- ret = system_printf("mount -t ext3 -o rw,defaults /dev/%s %s", mount->dev, tmp);
- }
- if(mount->fs == EXT2)
- {
- log_printf("mount -t ext2 -o rw,defaults /dev/%s %s", mount->dev, tmp);
- ret = system_printf("mount -t ext2 -o rw,defaults /dev/%s %s", mount->dev, tmp);
- }
- if(mount->fs == HFSPLUS)
- {
- log_printf("mount -t hfsplus -o rw,defaults,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
- ret = system_printf("mount -t hfsplus -o rw,defaults,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
- }
- if(mount->fs == NTFS)
- {
- log_printf("ntfs-3g /dev/%s %s -o force", mount->dev, tmp);
- ret = system_printf("ntfs-3g /dev/%s %s -o force", mount->dev, tmp);
+ struct uci_context *ctx;
+ char *options, *fstype;
+ ctx = ucix_init("mountd");
+ options = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "options");
+ fstype = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "fstype");
+ ucix_cleanup(ctx);
+ if(!fstype)
+ {
+ log_printf("mounting /dev/%s failed, expecting 'fstype' uci parameter (kernel driver) for %s", mount->dev, fs_names[mount->fs]);
+ } else {
+ if(!options)
+ {
+ log_printf("mount -t %s /dev/%s %s", fstype, mount->dev, tmp);
+ ret = system_printf("mount -t %s /dev/%s %s", fstype, mount->dev, tmp);
+ } else {
+ log_printf("mount -t %s -o %s /dev/%s %s", fstype, options, mount->dev, tmp);
+ ret = system_printf("mount -t %s -o %s /dev/%s %s", fstype, options, mount->dev, tmp);
+ }
+ }
+ exit(WEXITSTATUS(ret));
}
- exit(WEXITSTATUS(ret));
}
pid = waitpid(pid, &ret, 0);
ret = WEXITSTATUS(ret);
--
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