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.hardo...@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


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to