[LEDE-DEV] [PATCH mountd 4/4] filesystem mount options in uci as optional parameter
olivier.hardouin at gmail.com
olivier.hardouin at gmail.com
Wed Jun 15 07:10:24 PDT 2016
Possibility to overwrite the default hardcoded settings by adding 'options'
and 'fstype' in the uci configuration. The fs names are changed in lowercase
to comply with UCI general naming.
Signed-off-by: Olivier Hardouin <olivier.hardouin at gmail.com>
---
replaces patch "filesystem mount options in uci config" according to review comments
obsoletes patch "uci config for mountd fileystem options"
mount.c | 63 +++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 41 insertions(+), 22 deletions(-)
diff --git a/mount.c b/mount.c
index 36b99f5..aaddb70 100644
--- a/mount.c
+++ b/mount.c
@@ -51,16 +51,16 @@ struct mount {
char *fs_names[] = {
"",
"",
- "MBR",
- "EXT2",
- "EXT3",
- "FAT",
- "HFSPLUS",
+ "mbr",
+ "ext2",
+ "ext3",
+ "fat",
+ "hfsplus",
"",
- "NTFS",
+ "ntfs",
"",
- "EXFAT",
- "EXT4"
+ "exfat",
+ "ext4"
};
#define MAX_MOUNTED 32
@@ -228,40 +228,59 @@ int mount_new(char *path, char *dev)
pid = autofs_safe_fork();
if(!pid)
{
+ char *options, *fstype;
if(mount->fs == EXFAT)
{
- 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);
+ options = "rw,uid=1000,gid=1000";
+ fstype = "exfat";
}
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);
+ options = "rw,uid=1000,gid=1000";
+ fstype = "vfat";
}
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);
+ options = "rw,defaults";
+ fstype = "ext4";
}
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);
+ options = "rw,defaults";
+ fstype = "ext3";
}
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);
+ options = "rw,defaults";
+ fstype = "ext2";
}
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);
+ options = "rw,defaults,uid=1000,gid=1000";
+ fstype = "hfsplus";
}
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);
+ options = "force";
+ fstype = "ntfs-3g";
+ }
+ if(mount->fs > MBR && mount->fs <= EXT4)
+ {
+ struct uci_context *ctx;
+ char *uci_options, *uci_fstype;
+ ctx = ucix_init("mountd");
+ if(fs_names[mount->fs])
+ {
+ uci_options = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "options");
+ uci_fstype = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "fstype");
+ if(uci_options)
+ options = uci_options;
+ if(uci_fstype)
+ fstype = uci_fstype;
+ 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);
+ }
+ ucix_cleanup(ctx);
}
exit(WEXITSTATUS(ret));
}
--
1.9.1
More information about the Lede-dev
mailing list