netatalk  4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
unicode.h
Go to the documentation of this file.
1#ifndef _ATALK_UNICODE_H
2#define _ATALK_UNICODE_H 1
3
4#include <errno.h>
5#include <stdint.h>
6#include <sys/param.h>
7
8#define ucs2_t uint16_t
9
10#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0)
11
12#ifndef EILSEQ
13#define EILSEQ 84 /* Illegal byte sequence. */
14#endif
15
16/* generic iconv conversion structure */
17typedef struct {
18 size_t (*direct)(void *cd, char **inbuf, size_t *inbytesleft,
19 char **outbuf, size_t *outbytesleft);
20 size_t (*pull)(void *cd, char **inbuf, size_t *inbytesleft,
21 char **outbuf, size_t *outbytesleft);
22 size_t (*push)(void *cd, char **inbuf, size_t *inbytesleft,
23 char **outbuf, size_t *outbytesleft);
27
28#define CHARSET_CLIENT 1
29#define CHARSET_VOLUME 2
30#define CHARSET_PRECOMPOSED 4
31#define CHARSET_DECOMPOSED 8
32#define CHARSET_MULTIBYTE 16
33#define CHARSET_WIDECHAR 32
34#define CHARSET_ICONV 64
35
36#define IGNORE_CHAR '_'
37
38/* conversion flags */
39/* return the first convertable characters. */
40#define CONV_IGNORE (1<<0)
41/* escape unconvertable chars with :[UCS2HEX], */
42/* also escape '/'. Escape ':' if also CONV_ALLOW_COLON, */
43/* else ':' raises EILSEQ */
44#define CONV_ESCAPEHEX (1<<1)
45/* escape leading dots with :2600 */
46#define CONV_ESCAPEDOTS (1<<2)
47#define CONV_UNESCAPEHEX (1<<3)
48/* convert to UPPERcase */
49#define CONV_TOUPPER (1<<4)
50/* convert to lowercase */
51#define CONV_TOLOWER (1<<5)
52/* precompose */
53#define CONV_PRECOMPOSE (1<<6)
54/* decompose */
55#define CONV_DECOMPOSE (1<<7)
56/* force convertion */
57#define CONV_FORCE (1<<8)
58/* ignore EILSEQ, replace with IGNORE_CHAR (try USC2) */
59#define CONV__EILSEQ (1<<9)
60
61/* conversion return flags */
62/* mangling of returned name is required */
63#define CONV_REQMANGLE (1<<14)
64/* espace unconvertable chars with :[UCS2HEX] */
65#define CONV_REQESCAPE (1<<15)
66
67/* this defines the charset types used in samba */
68typedef enum {CH_UCS2 = 0, CH_UTF8 = 1, CH_MAC = 2, CH_UNIX = 3, CH_UTF8_MAC = 4} charset_t;
69
70#define NUM_CHARSETS 5
71
72/*
73 * for each charset we have a function that pulls from that charset to
74 * a ucs2 buffer, and a function that pushes to a ucs2 buffer
75 */
76
78 const char *name;
79 const long kTextEncoding;
80 size_t (*pull)(void *, char **inbuf, size_t *inbytesleft,
81 char **outbuf, size_t *outbytesleft);
82 size_t (*push)(void *, char **inbuf, size_t *inbytesleft,
83 char **outbuf, size_t *outbytesleft);
84 uint32_t flags;
85 const char *iname;
87};
88
89/* from iconv.c */
90extern atalk_iconv_t atalk_iconv_open(const char *, const char *);
91extern size_t atalk_iconv(atalk_iconv_t, const char **, size_t *, char **,
92 size_t *);
94extern struct charset_functions *find_charset_functions(const char *);
95extern int atalk_register_charset(struct charset_functions *);
96
97/* from utf16_case.c */
98extern ucs2_t toupper_w(ucs2_t);
99extern uint32_t toupper_sp(uint32_t);
100extern ucs2_t tolower_w(ucs2_t);
101extern uint32_t tolower_sp(uint32_t);
102
103/* from util_unistr.c */
104extern int strupper_w(ucs2_t *);
105extern int strlower_w(ucs2_t *);
106extern int islower_w(ucs2_t);
107extern int isupper_w(ucs2_t);
108extern size_t strlen_w(const ucs2_t *);
109extern size_t strnlen_w(const ucs2_t *, size_t);
110extern ucs2_t *strchr_w(const ucs2_t *, ucs2_t);
111extern ucs2_t *strcasechr_w(const ucs2_t *s, ucs2_t c);
112extern int strcmp_w(const ucs2_t *, const ucs2_t *);
113extern int strncmp_w(const ucs2_t *, const ucs2_t *, size_t);
114extern int strcasecmp_w(const ucs2_t *, const ucs2_t *);
115extern int strncasecmp_w(const ucs2_t *, const ucs2_t *, size_t);
116extern ucs2_t *strstr_w(const ucs2_t *s, const ucs2_t *ins);
117extern ucs2_t *strcasestr_w(const ucs2_t *, const ucs2_t *);
118extern ucs2_t *strndup_w(const ucs2_t *, size_t);
119extern ucs2_t *strdup_w(const ucs2_t *);
120extern ucs2_t *strncpy_w(ucs2_t *, const ucs2_t *, const size_t);
121extern ucs2_t *strncat_w(ucs2_t *, const ucs2_t *, const size_t);
122extern ucs2_t *strcat_w(ucs2_t *, const ucs2_t *);
123extern size_t precompose_w(ucs2_t *, size_t, ucs2_t *, size_t *);
124extern size_t decompose_w(ucs2_t *, size_t, ucs2_t *, size_t *);
125
126/* from charcnv.c */
127extern int set_charset_name(charset_t, const char *);
128extern void free_charset_names(void);
129extern void init_iconv(void);
130extern size_t convert_string(charset_t, charset_t, void const *, size_t,
131 void *, size_t);
132extern size_t convert_string_allocate(charset_t, charset_t, void const *,
133 size_t, char **);
134extern size_t charset_strupper(charset_t, const char *, size_t, char *,
135 size_t);
136extern size_t charset_strlower(charset_t, const char *, size_t, char *,
137 size_t);
138extern size_t ucs2_to_charset_allocate(charset_t, char **dest,
139 const ucs2_t *src);
140extern size_t ucs2_to_charset(charset_t, const ucs2_t *src, char *dest,
141 size_t);
142
143extern size_t convert_charset(charset_t, charset_t, charset_t, const char *,
144 size_t, char *, size_t, uint16_t *);
145extern size_t charset_precompose(charset_t, char *, size_t, char *, size_t);
146extern size_t charset_decompose(charset_t, char *, size_t, char *, size_t);
147
148extern charset_t add_charset(const char *name);
149
150#endif /* _ATALK_UNICODE_H */
Definition unicode.h:17
size_t(* direct)(void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
Definition unicode.h:18
char * from_name
Definition unicode.h:25
void * cd_pull
Definition unicode.h:24
size_t(* pull)(void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
Definition unicode.h:20
size_t(* push)(void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
Definition unicode.h:22
char * to_name
Definition unicode.h:25
void * cd_direct
Definition unicode.h:24
void * cd_push
Definition unicode.h:24
Definition unicode.h:77
const char * name
Definition unicode.h:78
size_t(* push)(void *, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
Definition unicode.h:82
struct charset_functions * prev
Definition unicode.h:86
const long kTextEncoding
Definition unicode.h:79
size_t(* pull)(void *, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
Definition unicode.h:80
uint32_t flags
Definition unicode.h:84
struct charset_functions * next
Definition unicode.h:86
const char * iname
Definition unicode.h:85
int set_charset_name(charset_t, const char *)
Definition charcnv.c:95
size_t ucs2_to_charset(charset_t, const ucs2_t *src, char *dest, size_t)
Definition charcnv.c:561
size_t precompose_w(ucs2_t *, size_t, ucs2_t *, size_t *)
Definition util_unistr.c:644
#define ucs2_t
Definition unicode.h:8
size_t atalk_iconv(atalk_iconv_t, const char **, size_t *, char **, size_t *)
Definition iconv.c:222
void free_charset_names(void)
Definition charcnv.c:105
int islower_w(ucs2_t)
Definition util_unistr.c:111
uint32_t toupper_sp(uint32_t)
Definition utf16_case.c:82
ucs2_t * strndup_w(const ucs2_t *, size_t)
Definition util_unistr.c:418
int strupper_w(ucs2_t *)
Definition util_unistr.c:73
ucs2_t * strdup_w(const ucs2_t *)
Definition util_unistr.c:444
int strcmp_w(const ucs2_t *, const ucs2_t *)
Definition util_unistr.c:233
struct charset_functions * find_charset_functions(const char *)
Definition iconv.c:130
ucs2_t * strncat_w(ucs2_t *, const ucs2_t *, const size_t)
Definition util_unistr.c:481
ucs2_t toupper_w(ucs2_t)
Definition utf16_case.c:18
void init_iconv(void)
Definition charcnv.c:195
size_t charset_decompose(charset_t, char *, size_t, char *, size_t)
Definition charcnv.c:606
size_t strnlen_w(const ucs2_t *, size_t)
Definition util_unistr.c:158
atalk_iconv_t atalk_iconv_open(const char *, const char *)
Definition iconv.c:263
ucs2_t * strcasechr_w(const ucs2_t *s, ucs2_t c)
Definition util_unistr.c:194
size_t charset_precompose(charset_t, char *, size_t, char *, size_t)
Definition charcnv.c:576
ucs2_t * strcasestr_w(const ucs2_t *, const ucs2_t *)
Definition util_unistr.c:297
size_t charset_strlower(charset_t, const char *, size_t, char *, size_t)
Definition charcnv.c:530
size_t decompose_w(ucs2_t *, size_t, ucs2_t *, size_t *)
Definition util_unistr.c:757
int strcasecmp_w(const ucs2_t *, const ucs2_t *)
Definition util_unistr.c:342
int atalk_iconv_close(atalk_iconv_t)
Definition iconv.c:363
size_t charset_strupper(charset_t, const char *, size_t, char *, size_t)
Definition charcnv.c:507
ucs2_t * strncpy_w(ucs2_t *, const ucs2_t *, const size_t)
Definition util_unistr.c:455
int isupper_w(ucs2_t)
Definition util_unistr.c:127
uint32_t tolower_sp(uint32_t)
Definition utf16_case.c:186
int strlower_w(ucs2_t *)
Definition util_unistr.c:35
int strncmp_w(const ucs2_t *, const ucs2_t *, size_t)
Definition util_unistr.c:251
size_t convert_charset(charset_t, charset_t, charset_t, const char *, size_t, char *, size_t, uint16_t *)
Definition charcnv.c:966
int strncasecmp_w(const ucs2_t *, const ucs2_t *, size_t)
Definition util_unistr.c:378
size_t strlen_w(const ucs2_t *)
Definition util_unistr.c:143
ucs2_t * strcat_w(ucs2_t *, const ucs2_t *)
Definition util_unistr.c:498
charset_t add_charset(const char *name)
Definition charcnv.c:136
ucs2_t tolower_w(ucs2_t)
Definition utf16_case.c:126
ucs2_t * strchr_w(const ucs2_t *, ucs2_t)
Definition util_unistr.c:172
ucs2_t * strstr_w(const ucs2_t *s, const ucs2_t *ins)
Definition util_unistr.c:269
int atalk_register_charset(struct charset_functions *)
Definition iconv.c:145
size_t ucs2_to_charset_allocate(charset_t, char **dest, const ucs2_t *src)
Definition charcnv.c:569
charset_t
Definition unicode.h:68
@ CH_MAC
Definition unicode.h:68
@ CH_UNIX
Definition unicode.h:68
@ CH_UCS2
Definition unicode.h:68
@ CH_UTF8
Definition unicode.h:68
@ CH_UTF8_MAC
Definition unicode.h:68
size_t convert_string_allocate(charset_t, charset_t, void const *, size_t, char **)
Definition charcnv.c:462
size_t convert_string(charset_t, charset_t, void const *, size_t, void *, size_t)
Definition charcnv.c:313