Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.17-rc2 61 lines 1.1 kB view raw
1/* 2 * Module for handling utf8 just like any other charset. 3 * By Urban Widmark 2000 4 */ 5 6#include <linux/module.h> 7#include <linux/kernel.h> 8#include <linux/string.h> 9#include <linux/nls.h> 10#include <linux/errno.h> 11 12static unsigned char identity[256]; 13 14static int uni2char(wchar_t uni, unsigned char *out, int boundlen) 15{ 16 int n; 17 18 if ( (n = utf8_wctomb(out, uni, boundlen)) == -1) { 19 *out = '?'; 20 return -EINVAL; 21 } 22 return n; 23} 24 25static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) 26{ 27 int n; 28 29 if ( (n = utf8_mbtowc(uni, rawstring, boundlen)) == -1) { 30 *uni = 0x003f; /* ? */ 31 n = -EINVAL; 32 } 33 return n; 34} 35 36static struct nls_table table = { 37 .charset = "utf8", 38 .uni2char = uni2char, 39 .char2uni = char2uni, 40 .charset2lower = identity, /* no conversion */ 41 .charset2upper = identity, 42 .owner = THIS_MODULE, 43}; 44 45static int __init init_nls_utf8(void) 46{ 47 int i; 48 for (i=0; i<256; i++) 49 identity[i] = i; 50 51 return register_nls(&table); 52} 53 54static void __exit exit_nls_utf8(void) 55{ 56 unregister_nls(&table); 57} 58 59module_init(init_nls_utf8) 60module_exit(exit_nls_utf8) 61MODULE_LICENSE("Dual BSD/GPL");