Re: [PATCHv2] fat: add config option to set UTF-8 mount option by default

From: OGAWA Hirofumi
Date: Tue Mar 08 2016 - 13:09:04 EST


"Maciej S. Szmigiero" <mail@xxxxxxxxxxxxxxxxxxxxx> writes:

> FAT has long supported its own default file name encoding
> config setting, separate from CONFIG_NLS_DEFAULT.
>
> However, if UTF-8 encoded file names are desired FAT
> character set should not be set to utf8 since this would
> make file names case sensitive even if case insensitive
> matching is requested.
> Instead, "utf8" mount options should be provided to enable
> UTF-8 file names in FAT file system.
>
> Unfortunately, there was no possibility to set the default
> value of this option so on UTF-8 system "utf8" mount option
> had to be added manually to most FAT mounts.
>
> This patch adds config option to set such default value.
>
> Signed-off-by: Maciej S. Szmigiero <mail@xxxxxxxxxxxxxxxxxxxxx>

Acked-by: OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>

> ---
> Changes from v1: use IS_ENABLED() macro to simplify code
>
> Documentation/filesystems/vfat.txt | 7 ++++---
> fs/fat/Kconfig | 18 +++++++++++++++++-
> fs/fat/inode.c | 4 +++-
> 3 files changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/filesystems/vfat.txt b/Documentation/filesystems/vfat.txt
> index 223c32171dcc..cf51360e3a9f 100644
> --- a/Documentation/filesystems/vfat.txt
> +++ b/Documentation/filesystems/vfat.txt
> @@ -56,9 +56,10 @@ iocharset=<name> -- Character set to use for converting between the
> you should consider the following option instead.
>
> utf8=<bool> -- UTF-8 is the filesystem safe version of Unicode that
> - is used by the console. It can be enabled for the
> - filesystem with this option. If 'uni_xlate' gets set,
> - UTF-8 gets disabled.
> + is used by the console. It can be enabled or disabled
> + for the filesystem with this option.
> + If 'uni_xlate' gets set, UTF-8 gets disabled.
> + By default, FAT_DEFAULT_UTF8 setting is used.
>
> uni_xlate=<bool> -- Translate unhandled Unicode characters to special
> escaped sequences. This would let you backup and
> diff --git a/fs/fat/Kconfig b/fs/fat/Kconfig
> index 182f9ffe2b51..3ff1772f612e 100644
> --- a/fs/fat/Kconfig
> +++ b/fs/fat/Kconfig
> @@ -93,8 +93,24 @@ config FAT_DEFAULT_IOCHARSET
> that most of your FAT filesystems use, and can be overridden
> with the "iocharset" mount option for FAT filesystems.
> Note that "utf8" is not recommended for FAT filesystems.
> - If unsure, you shouldn't set "utf8" here.
> + If unsure, you shouldn't set "utf8" here - select the next option
> + instead if you would like to use UTF-8 encoded file names by default.
> See <file:Documentation/filesystems/vfat.txt> for more information.
>
> Enable any character sets you need in File Systems/Native Language
> Support.
> +
> +config FAT_DEFAULT_UTF8
> + bool "Enable FAT UTF-8 option by default"
> + depends on VFAT_FS
> + default n
> + help
> + Set this if you would like to have "utf8" mount option set
> + by default when mounting FAT filesystems.
> +
> + Even if you say Y here can always disable UTF-8 for
> + particular mount by adding "utf8=0" to mount options.
> +
> + Say Y if you use UTF-8 encoding for file names, N otherwise.
> +
> + See <file:Documentation/filesystems/vfat.txt> for more information.
> diff --git a/fs/fat/inode.c b/fs/fat/inode.c
> index a5599052116c..226281068a46 100644
> --- a/fs/fat/inode.c
> +++ b/fs/fat/inode.c
> @@ -1127,7 +1127,7 @@ static int parse_options(struct super_block *sb, char *options, int is_vfat,
> }
> opts->name_check = 'n';
> opts->quiet = opts->showexec = opts->sys_immutable = opts->dotsOK = 0;
> - opts->utf8 = opts->unicode_xlate = 0;
> + opts->unicode_xlate = 0;
> opts->numtail = 1;
> opts->usefree = opts->nocase = 0;
> opts->tz_set = 0;
> @@ -1135,6 +1135,8 @@ static int parse_options(struct super_block *sb, char *options, int is_vfat,
> opts->errors = FAT_ERRORS_RO;
> *debug = 0;
>
> + opts->utf8 = IS_ENABLED(CONFIG_FAT_DEFAULT_UTF8) && is_vfat;
> +
> if (!options)
> goto out;
>

--
OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>