/*
* Module for handling utf8 just like any other charset.
* By Urban Widmark 2000
*/
#include "nls.h"
static unsigned char identity[256];
static int uni2char(wchar_t uni, unsigned char *out, int boundlen)
{
int n;
if ( (n = utf8_wctomb(out, uni, boundlen)) == -1) {
*out = '?';
return -EINVAL;
}
return n;
}
static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)
{
int n;
if ( (n = utf8_mbtowc(uni, rawstring, boundlen)) == -1) {
*uni = 0x003f; /* ? */
n = -EINVAL;
}
return n;
}
static struct nls_table table = {
"utf8",
uni2char,
char2uni,
identity, /* no conversion */
identity,
THIS_MODULE,
};
int init_nls_utf8(void)
{
int i;
for (i=0; i<256; i++)
identity[i] = i;
return register_nls(&table);
}
void exit_nls_utf8(void)
{
unregister_nls(&table);
}
syntax highlighted by Code2HTML, v. 0.9.1