1#ifndef _LINUX_NLS_H 2#define _LINUX_NLS_H 3 4#include <linux/init.h> 5 6/* unicode character */ 7typedef __u16 wchar_t; 8 9struct nls_table { 10 char *charset; 11 char *alias; 12 int (*uni2char) (wchar_t uni, unsigned char *out, int boundlen); 13 int (*char2uni) (const unsigned char *rawstring, int boundlen, 14 wchar_t *uni); 15 unsigned char *charset2lower; 16 unsigned char *charset2upper; 17 struct module *owner; 18 struct nls_table *next; 19}; 20 21/* this value hold the maximum octet of charset */ 22#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */ 23 24/* nls.c */ 25extern int register_nls(struct nls_table *); 26extern int unregister_nls(struct nls_table *); 27extern struct nls_table *load_nls(char *); 28extern void unload_nls(struct nls_table *); 29extern struct nls_table *load_nls_default(void); 30 31extern int utf8_mbtowc(wchar_t *, const __u8 *, int); 32extern int utf8_mbstowcs(wchar_t *, const __u8 *, int); 33extern int utf8_wctomb(__u8 *, wchar_t, int); 34extern int utf8_wcstombs(__u8 *, const wchar_t *, int); 35 36static inline unsigned char nls_tolower(struct nls_table *t, unsigned char c) 37{ 38 unsigned char nc = t->charset2lower[c]; 39 40 return nc ? nc : c; 41} 42 43static inline unsigned char nls_toupper(struct nls_table *t, unsigned char c) 44{ 45 unsigned char nc = t->charset2upper[c]; 46 47 return nc ? nc : c; 48} 49 50static inline int nls_strnicmp(struct nls_table *t, const unsigned char *s1, 51 const unsigned char *s2, int len) 52{ 53 while (len--) { 54 if (nls_tolower(t, *s1++) != nls_tolower(t, *s2++)) 55 return 1; 56 } 57 58 return 0; 59} 60 61#define MODULE_ALIAS_NLS(name) MODULE_ALIAS("nls_" __stringify(name)) 62 63#endif /* _LINUX_NLS_H */ 64