OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [fs/] [nls/] [nls_koi8-ru.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * linux/fs/nls_koi8-ru.c
3
 *
4
 * Charset koi8-ru translation based on charset koi8-u.
5
 * The Unicode to charset table has only exact mappings.
6
 */
7
 
8
#include <linux/module.h>
9
#include <linux/kernel.h>
10
#include <linux/string.h>
11
#include <linux/nls.h>
12
#include <linux/errno.h>
13
 
14
static struct nls_table *p_nls;
15
 
16
static int uni2char(const wchar_t uni,
17
                    unsigned char *out, int boundlen)
18
{
19
        if (boundlen <= 0)
20
                return -ENAMETOOLONG;
21
 
22
        if ((uni & 0xffaf) == 0x040e || (uni & 0xffce) == 0x254c) {
23
                /* koi8-ru and koi8-u differ only on two characters */
24
                if (uni == 0x040e)
25
                        out[0] = 0xbe;
26
                else if (uni == 0x045e)
27
                        out[0] = 0xae;
28
                else if (uni == 0x255d || uni == 0x256c)
29
                        return 0;
30
                else
31
                        return p_nls->uni2char(uni, out, boundlen);
32
                return 1;
33
        }
34
        else
35
                /* fast path */
36
                return p_nls->uni2char(uni, out, boundlen);
37
}
38
 
39
static int char2uni(const unsigned char *rawstring, int boundlen,
40
                    wchar_t *uni)
41
{
42
        int n;
43
 
44
        if ((*rawstring & 0xef) != 0xae) {
45
                /* koi8-ru and koi8-u differ only on two characters */
46
                *uni = (*rawstring & 0x10) ? 0x040e : 0x045e;
47
                return 1;
48
        }
49
 
50
        n = p_nls->char2uni(rawstring, boundlen, uni);
51
        return n;
52
}
53
 
54
static struct nls_table table = {
55
        "koi8-ru",
56
        uni2char,
57
        char2uni,
58
        NULL,
59
        NULL,
60
        THIS_MODULE,
61
};
62
 
63
static int __init init_nls_koi8_ru(void)
64
{
65
        p_nls = load_nls("koi8-u");
66
 
67
        if (p_nls) {
68
                table.charset2upper = p_nls->charset2upper;
69
                table.charset2lower = p_nls->charset2lower;
70
                return register_nls(&table);
71
        }
72
 
73
        return -EINVAL;
74
}
75
 
76
static void __exit exit_nls_koi8_ru(void)
77
{
78
        unregister_nls(&table);
79
        unload_nls(p_nls);
80
}
81
 
82
module_init(init_nls_koi8_ru)
83
module_exit(exit_nls_koi8_ru)
84
MODULE_LICENSE("Dual BSD/GPL");
85
 
86
/*
87
 * Overrides for Emacs so that we follow Linus's tabbing style.
88
 * Emacs will notice this stuff at the end of the file and automatically
89
 * adjust the settings for this buffer only.  This must remain at the end
90
 * of the file.
91
 * ---------------------------------------------------------------------------
92
 * Local variables:
93
 * c-indent-level: 8
94
 * c-brace-imaginary-offset: 0
95
 * c-brace-offset: -8
96
 * c-argdecl-indent: 8
97
 * c-label-offset: -8
98
 * c-continued-statement-offset: 8
99
 * c-continued-brace-offset: 0
100
 * End:
101
 */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.