@@ -582,21 +582,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macceltic",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macceltic",
+ .tables = &table,
+};
+
static int __init init_nls_macceltic(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macceltic(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macceltic)
@@ -512,21 +512,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "maccenteuro",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "maccenteuro",
+ .tables = &table,
+};
+
static int __init init_nls_maccenteuro(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_maccenteuro(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_maccenteuro)
@@ -582,21 +582,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "maccroatian",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "maccroatian",
+ .tables = &table,
+};
+
static int __init init_nls_maccroatian(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_maccroatian(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_maccroatian)
@@ -477,21 +477,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "maccyrillic",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "maccyrillic",
+ .tables = &table,
+};
+
static int __init init_nls_maccyrillic(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_maccyrillic(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_maccyrillic)
@@ -547,21 +547,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macgaelic",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macgaelic",
+ .tables = &table,
+};
+
static int __init init_nls_macgaelic(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macgaelic(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macgaelic)
@@ -477,21 +477,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macgreek",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macgreek",
+ .tables = &table,
+};
+
static int __init init_nls_macgreek(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macgreek(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macgreek)
@@ -582,21 +582,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "maciceland",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "maciceland",
+ .tables = &table,
+};
+
static int __init init_nls_maciceland(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_maciceland(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_maciceland)
@@ -512,21 +512,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macinuit",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macinuit",
+ .tables = &table,
+};
+
static int __init init_nls_macinuit(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macinuit(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macinuit)
@@ -617,21 +617,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macroman",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macroman",
+ .tables = &table,
+};
+
static int __init init_nls_macroman(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macroman(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macroman)
@@ -582,21 +582,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macromanian",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macromanian",
+ .tables = &table,
+};
+
static int __init init_nls_macromanian(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macromanian(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macromanian)
@@ -582,21 +582,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "macturkish",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "macturkish",
+ .tables = &table,
+};
+
static int __init init_nls_macturkish(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_macturkish(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_macturkish)
@@ -147,21 +147,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "ascii",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "ascii",
+ .tables = &table,
+};
+
static int __init init_nls_ascii(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_ascii(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_ascii)
@@ -16,13 +16,18 @@
#include <linux/kmod.h>
#include <linux/spinlock.h>
-static struct nls_table default_table;
-static struct nls_table *tables = &default_table;
+extern struct nls_charset default_charset;
+static struct nls_charset *charsets = &default_charset;
static DEFINE_SPINLOCK(nls_lock);
+static struct nls_table *nls_load_table(struct nls_charset *charset)
+{
+ /* For now, return the default table, which is the first one found. */
+ return charset->tables;
+}
-int __register_nls(struct nls_table *nls, struct module *owner)
+int __register_nls(struct nls_charset *nls, struct module *owner)
{
- struct nls_table ** tmp = &tables;
+ struct nls_charset **tmp = &charsets;
if (nls->next)
return -EBUSY;
@@ -36,16 +41,16 @@ int __register_nls(struct nls_table *nls, struct module *owner)
}
tmp = &(*tmp)->next;
}
- nls->next = tables;
- tables = nls;
+ nls->next = charsets;
+ charsets = nls;
spin_unlock(&nls_lock);
return 0;
}
EXPORT_SYMBOL(__register_nls);
-int unregister_nls(struct nls_table * nls)
+int unregister_nls(struct nls_charset * nls)
{
- struct nls_table ** tmp = &tables;
+ struct nls_charset **tmp = &charsets;
spin_lock(&nls_lock);
while (*tmp) {
@@ -60,31 +65,42 @@ int unregister_nls(struct nls_table * nls)
return -EINVAL;
}
-static struct nls_table *find_nls(char *charset)
+static struct nls_charset *find_nls(const char *charset)
{
- struct nls_table *nls;
+ struct nls_charset *nls;
spin_lock(&nls_lock);
- for (nls = tables; nls; nls = nls->next) {
- if (!strcmp(nls_charset_name(nls), charset))
+ for (nls = charsets; nls; nls = nls->next) {
+ if (!strcmp(nls->charset, charset))
break;
if (nls->alias && !strcmp(nls->alias, charset))
break;
}
- if (nls && !try_module_get(nls->owner))
- nls = NULL;
+
+ if (!nls)
+ nls = ERR_PTR(-EINVAL);
+ else if (!try_module_get(nls->owner))
+ nls = ERR_PTR(-EBUSY);
+
spin_unlock(&nls_lock);
return nls;
}
struct nls_table *load_nls(char *charset)
{
- return try_then_request_module(find_nls(charset), "nls_%s", charset);
+ struct nls_charset *nls_charset;
+
+ nls_charset = try_then_request_module(find_nls(charset),
+ "nls_%s", charset);
+ if (!IS_ERR(nls_charset))
+ return NULL;
+
+ return nls_load_table(nls_charset);
}
void unload_nls(struct nls_table *nls)
{
if (nls)
- module_put(nls->owner);
+ module_put(nls->charset->owner);
}
EXPORT_SYMBOL(unregister_nls);
@@ -328,20 +328,26 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp1250",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp1250",
+ .tables = &table,
+};
+
static int __init init_nls_cp1250(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp1250(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp1250)
@@ -282,21 +282,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp1251",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp1251",
+ .tables = &table,
+};
+
static int __init init_nls_cp1251(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp1251(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp1251)
@@ -363,22 +363,28 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp1255",
- .alias = "iso8859-8",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .alias = "iso8859-8",
+ .charset = "cp1255",
+ .tables = &table,
+};
+
static int __init init_nls_cp1255(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp1255(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp1255)
@@ -368,21 +368,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp437",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp437",
+ .tables = &table,
+};
+
static int __init init_nls_cp437(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp437(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp437)
@@ -331,21 +331,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp737",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp737",
+ .tables = &table,
+};
+
static int __init init_nls_cp737(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp737(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp737)
@@ -300,21 +300,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp775",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp775",
+ .tables = &table,
+};
+
static int __init init_nls_cp775(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp775(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp775)
@@ -296,21 +296,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp850",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp850",
+ .tables = &table,
+};
+
static int __init init_nls_cp850(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp850(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp850)
@@ -318,21 +318,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp852",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp852",
+ .tables = &table,
+};
+
static int __init init_nls_cp852(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp852(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp852)
@@ -280,21 +280,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp855",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp855",
+ .tables = &table,
+};
+
static int __init init_nls_cp855(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp855(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp855)
@@ -282,21 +282,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp857",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp857",
+ .tables = &table,
+};
+
static int __init init_nls_cp857(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp857(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp857)
@@ -345,21 +345,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp860",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp860",
+ .tables = &table,
+};
+
static int __init init_nls_cp860(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp860(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp860)
@@ -368,21 +368,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp861",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp861",
+ .tables = &table,
+};
+
static int __init init_nls_cp861(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp861(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp861)
@@ -402,21 +402,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp862",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp862",
+ .tables = &table,
+};
+
static int __init init_nls_cp862(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp862(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp862)
@@ -362,21 +362,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp863",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp863",
+ .tables = &table,
+};
+
static int __init init_nls_cp863(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp863(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp863)
@@ -388,21 +388,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp864",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp864",
+ .tables = &table,
+};
+
static int __init init_nls_cp864(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp864(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp864)
@@ -368,21 +368,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp865",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp865",
+ .tables = &table,
+};
+
static int __init init_nls_cp865(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp865(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp865)
@@ -286,21 +286,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp866",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp866",
+ .tables = &table,
+};
+
static int __init init_nls_cp866(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp866(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp866)
@@ -296,21 +296,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp869",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "cp869",
+ .tables = &table,
+};
+
static int __init init_nls_cp869(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp869(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp869)
@@ -254,22 +254,28 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp874",
- .alias = "tis-620",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .alias = "tis-620",
+ .charset = "cp874",
+ .tables = &table,
+};
+
static int __init init_nls_cp874(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp874(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp874)
@@ -7912,22 +7912,28 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp932",
- .alias = "sjis",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .alias = "sjis",
+ .charset = "cp932",
+ .tables = &table,
+};
+
static int __init init_nls_cp932(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp932(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp932)
@@ -11090,22 +11090,28 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp936",
- .alias = "gb2312",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .alias = "gb2312",
+ .charset = "cp936",
+ .tables = &table,
+};
+
static int __init init_nls_cp936(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp936(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp936)
@@ -13925,22 +13925,28 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp949",
- .alias = "euc-kr",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .alias = "euc-kr",
+ .charset = "cp949",
+ .tables = &table,
+};
+
static int __init init_nls_cp949(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp949(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp949)
@@ -9461,22 +9461,28 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "cp950",
- .alias = "big5",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .alias = "big5",
+ .charset = "cp950",
+ .tables = &table,
+};
+
static int __init init_nls_cp950(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_cp950(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_cp950)
@@ -17,7 +17,7 @@
#include <asm/byteorder.h>
#include <linux/nls.h>
-static struct nls_table default_table;
+struct nls_charset default_charset;
struct utf8_table {
int cmask;
@@ -453,12 +453,17 @@ static const struct nls_ops charset_ops = {
};
static struct nls_table default_table = {
- .charset = "default",
+ .charset = &default_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+struct nls_charset default_charset = {
+ .charset = "default",
+ .tables = &default_table,
+};
+
/* Returns a simple default translation table */
struct nls_table *load_nls_default(void)
{
@@ -554,11 +554,17 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "euc-jp",
+ .charset = &nls_charset,
.ops = &charset_ops,
};
+static struct nls_charset nls_charset = {
+ .charset = "euc-jp",
+ .tables = &table,
+};
+
static int __init init_nls_euc_jp(void)
{
p_nls = load_nls("cp932");
@@ -566,7 +572,7 @@ static int __init init_nls_euc_jp(void)
if (p_nls) {
table.charset2upper = p_nls->charset2upper;
table.charset2lower = p_nls->charset2lower;
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
return -EINVAL;
@@ -574,7 +580,7 @@ static int __init init_nls_euc_jp(void)
static void __exit exit_nls_euc_jp(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
unload_nls(p_nls);
}
@@ -238,21 +238,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-1",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-1",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_1(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_1(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_1)
@@ -266,21 +266,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-13",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-13",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_13(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_13(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_13)
@@ -322,21 +322,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-14",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-14",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_14(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_14(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_14)
@@ -288,21 +288,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-15",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-15",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_15(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_15(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_15)
@@ -289,21 +289,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-2",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-2",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_2(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_2(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_2)
@@ -289,21 +289,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-3",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-3",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_3(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_3(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_3)
@@ -289,21 +289,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-4",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-4",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_4(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_4(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_4)
@@ -253,21 +253,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-5",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-5",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_5(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_5(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_5)
@@ -244,21 +244,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-6",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-6",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_6(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_6(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_6)
@@ -298,21 +298,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-7",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-7",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_7(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_7(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_7)
@@ -253,21 +253,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "iso8859-9",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "iso8859-9",
+ .tables = &table,
+};
+
static int __init init_nls_iso8859_9(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_iso8859_9(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_iso8859_9)
@@ -304,21 +304,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "koi8-r",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "koi8-r",
+ .tables = &table,
+};
+
static int __init init_nls_koi8_r(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_koi8_r(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_koi8_r)
@@ -56,11 +56,17 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "koi8-ru",
+ .charset = &nls_charset,
.ops = &charset_ops,
};
+static struct nls_charset nls_charset = {
+ .charset = "koi8-ru",
+ .tables = &table,
+};
+
static int __init init_nls_koi8_ru(void)
{
p_nls = load_nls("koi8-u");
@@ -68,7 +74,7 @@ static int __init init_nls_koi8_ru(void)
if (p_nls) {
table.charset2upper = p_nls->charset2upper;
table.charset2lower = p_nls->charset2lower;
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
return -EINVAL;
@@ -76,7 +82,7 @@ static int __init init_nls_koi8_ru(void)
static void __exit exit_nls_koi8_ru(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
unload_nls(p_nls);
}
@@ -311,21 +311,27 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "koi8-u",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = charset2lower,
.charset2upper = charset2upper,
};
+static struct nls_charset nls_charset = {
+ .charset = "koi8-u",
+ .tables = &table,
+};
+
static int __init init_nls_koi8_u(void)
{
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_koi8_u(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_koi8_u)
@@ -45,25 +45,31 @@ static const struct nls_ops charset_ops = {
.char2uni = char2uni,
};
+static struct nls_charset nls_charset;
static struct nls_table table = {
- .charset = "utf8",
+ .charset = &nls_charset,
.ops = &charset_ops,
.charset2lower = identity, /* no conversion */
.charset2upper = identity,
};
+static struct nls_charset nls_charset = {
+ .charset = "utf8",
+ .tables = &table,
+};
+
static int __init init_nls_utf8(void)
{
int i;
for (i=0; i<256; i++)
identity[i] = i;
- return register_nls(&table);
+ return register_nls(&nls_charset);
}
static void __exit exit_nls_utf8(void)
{
- unregister_nls(&table);
+ unregister_nls(&nls_charset);
}
module_init(init_nls_utf8)
@@ -29,15 +29,21 @@ struct nls_ops {
};
struct nls_table {
- const char *charset;
- const char *alias;
+ const struct nls_charset *charset;
const struct nls_ops *ops;
const unsigned char *charset2lower;
const unsigned char *charset2upper;
- struct module *owner;
struct nls_table *next;
};
+struct nls_charset {
+ const char *charset;
+ const char *alias;
+ struct module *owner;
+ struct nls_table *tables;
+ struct nls_charset *next;
+};
+
/* this value hold the maximum octet of charset */
#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */
@@ -49,8 +55,8 @@ enum utf16_endian {
};
/* nls_base.c */
-extern int __register_nls(struct nls_table *, struct module *);
-extern int unregister_nls(struct nls_table *);
+extern int __register_nls(struct nls_charset *, struct module *);
+extern int unregister_nls(struct nls_charset *);
extern struct nls_table *load_nls(char *);
extern void unload_nls(struct nls_table *);
extern struct nls_table *load_nls_default(void);
@@ -78,7 +84,7 @@ static inline int nls_char2uni(const struct nls_table *table,
static inline const char *nls_charset_name(const struct nls_table *table)
{
- return table->charset;
+ return table->charset->charset;
}
static inline unsigned char nls_tolower(struct nls_table *t, unsigned char c)