The following extended options are supported:
.RS 1.2i
.TP
+.BI fname_encoding= encoding-name
+Enable the
+.I fname_encoding
+feature in the super block and set
+.I encoding-name
+as the encoding to be used. If
+.I encoding-name
+is not specified, the encoding defined in
+.BR mke2fs.conf (5)
+is used.
+.TP
+.BI fname_encoding_flags= encoding-flags
+Define parameters for file name character encoding operations. If a
+flag is not changed using this parameter, its default value is used.
+.I encoding-flags
+should be a comma-separated lists of flags to be enabled. To disable a
+flag, add it to the list with the prefix "no".
+
+The only flag that can be set right now is
+.I strict
+which means that invalid strings should be rejected by the file system.
+In the default configuration, the
+.I strict
+flag is disabled.
+.TP
.BI mmp_update_interval= interval
Adjust the initial MMP update interval to
.I interval
int len;
int r_usage = 0;
int ret;
+ int encoding = -1;
+ char *encoding_flags = NULL;
len = strlen(opts);
buf = malloc(len+1);
}
} else if (!strcmp(token, "android_sparse")) {
android_sparse_file = 1;
+ } else if (!strcmp(token, "fname_encoding")) {
+ if (!arg) {
+ profile_get_string(profile, "options",
+ "fname_encoding", 0, 0,
+ &arg);
+ if (!arg) {
+ r_usage++;
+ continue;
+ }
+ }
+
+ encoding = e2p_str2encoding(arg);
+ if (encoding < 0) {
+ fprintf(stderr, _("Invalid encoding: %s"), arg);
+ r_usage++;
+ continue;
+ }
+ param->s_encoding = encoding;
+ ext2fs_set_feature_fname_encoding(param);
+ } else if (!strcmp(token, "fname_encoding_flags")) {
+ if (!arg) {
+ r_usage++;
+ continue;
+ }
+ encoding_flags = arg;
} else {
r_usage++;
badopt = token;
"\ttest_fs\n"
"\tdiscard\n"
"\tnodiscard\n"
+ "\tfname_encoding=<encoding>\n"
+ "\tfname_encoding_flags=<flags>\n"
"\tquotatype=<quota type(s) to be enabled>\n\n"),
badopt ? badopt : "");
free(buf);
"multiple of stride %u.\n\n"),
param->s_raid_stripe_width, param->s_raid_stride);
+ if (ext2fs_has_feature_fname_encoding(param)) {
+ param->s_encoding_flags =
+ e2p_get_encoding_flags(param->s_encoding);
+
+ if (encoding_flags &&
+ e2p_str2encoding_flags(param->s_encoding, encoding_flags,
+ ¶m->s_encoding_flags)) {
+ fprintf(stderr, _("error: Invalid encoding flag: %s\n"),
+ encoding_flags);
+ free(buf);
+ exit(1);
+ }
+ } else if (encoding_flags) {
+ fprintf(stderr, _("error: An encoding must be explicitely "
+ "specified when passing encoding-flags\n"));
+ free(buf);
+ exit(1);
+ }
+
free(buf);
}
EXT4_FEATURE_INCOMPAT_64BIT|
EXT4_FEATURE_INCOMPAT_INLINE_DATA|
EXT4_FEATURE_INCOMPAT_ENCRYPT |
+ EXT4_FEATURE_INCOMPAT_FNAME_ENCODING |
EXT4_FEATURE_INCOMPAT_CSUM_SEED |
EXT4_FEATURE_INCOMPAT_LARGEDIR,
/* R/O compat */
int use_bsize;
char *newpath;
int pathlen = sizeof(PATH_SET) + 1;
+ char *encoding_name = NULL;
+ int encoding;
if (oldpath)
pathlen += strlen(oldpath);
ext2fs_clear_feature_huge_file(&fs_param);
ext2fs_clear_feature_metadata_csum(&fs_param);
ext2fs_clear_feature_ea_inode(&fs_param);
+ ext2fs_clear_feature_fname_encoding(&fs_param);
}
edit_feature(fs_features ? fs_features : tmp,
&fs_param.s_feature_compat);
if (packed_meta_blocks)
journal_location = 0;
+ if (ext2fs_has_feature_fname_encoding(&fs_param)) {
+ profile_get_string(profile, "options", "fname_encoding",
+ 0, 0, &encoding_name);
+ if (!encoding_name) {
+ com_err(program_name, 0, "%s",
+ _("Filename encoding type must be specified\n"
+ "Use -E fname_encoding=<name> instead"));
+ exit(1);
+ }
+ encoding = e2p_str2encoding(encoding_name);
+ if (encoding < 0) {
+ com_err(program_name, 0, "%s",
+ _("Unknown default filename encoding\n"
+ "Use -E fname_encoding=<name> instead"));
+ exit(1);
+ }
+ fs_param.s_encoding = encoding;
+ fs_param.s_encoding_flags = e2p_get_encoding_flags(encoding);
+ }
+
/* Get options from profile */
for (cpp = fs_types; *cpp; cpp++) {
tmp = NULL;
}
}
+ if (ext2fs_has_feature_fname_encoding(&fs_param) &&
+ ext2fs_has_feature_encrypt(&fs_param)) {
+ com_err(program_name, 0, "%s",
+ _("The encrypt and encoding features are not "
+ "compatible.\nThey can not be both enabled "
+ "simultaneously.\n"));
+ exit (1);
+ }
+
/* Don't allow user to set both metadata_csum and uninit_bg bits. */
if (ext2fs_has_feature_metadata_csum(&fs_param) &&
ext2fs_has_feature_gdt_csum(&fs_param))