source: vendor/current/lib/util/charset/charset.h

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 9.6 KB
Line 
1/*
2 Unix SMB/CIFS implementation.
3 charset defines
4 Copyright (C) Andrew Tridgell 2001
5 Copyright (C) Jelmer Vernooij 2002
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21/* This is a public header file that is installed as part of Samba.
22 * If you remove any functions or change their signature, update
23 * the so version number. */
24
25#ifndef __CHARSET_H__
26#define __CHARSET_H__
27
28#include <talloc.h>
29
30/* this defines the charset types used in samba */
31typedef enum {CH_UTF16LE=0, CH_UTF16=0, CH_UNIX, CH_DOS, CH_UTF8, CH_UTF16BE, CH_UTF16MUNGED} charset_t;
32
33#define NUM_CHARSETS 7
34
35/*
36 * SMB UCS2 (16-bit unicode) internal type.
37 * smb_ucs2_t is *always* in little endian format.
38 */
39
40typedef uint16_t smb_ucs2_t;
41
42#ifdef WORDS_BIGENDIAN
43#define UCS2_SHIFT 8
44#else
45#define UCS2_SHIFT 0
46#endif
47
48/* turn a 7 bit character into a ucs2 character */
49#define UCS2_CHAR(c) ((c) << UCS2_SHIFT)
50
51/*
52 * for each charset we have a function that pulls from that charset to
53 * a ucs2 buffer, and a function that pushes to a ucs2 buffer
54 * */
55
56struct charset_functions {
57 const char *name;
58 size_t (*pull)(void *, const char **inbuf, size_t *inbytesleft,
59 char **outbuf, size_t *outbytesleft);
60 size_t (*push)(void *, const char **inbuf, size_t *inbytesleft,
61 char **outbuf, size_t *outbytesleft);
62 bool samba_internal_charset;
63};
64
65/* this type is used for manipulating unicode codepoints */
66typedef uint32_t codepoint_t;
67
68#define INVALID_CODEPOINT ((codepoint_t)-1)
69
70/* generic iconv conversion structure */
71typedef struct smb_iconv_s {
72 size_t (*direct)(void *cd, const char **inbuf, size_t *inbytesleft,
73 char **outbuf, size_t *outbytesleft);
74 size_t (*pull)(void *cd, const char **inbuf, size_t *inbytesleft,
75 char **outbuf, size_t *outbytesleft);
76 size_t (*push)(void *cd, const char **inbuf, size_t *inbytesleft,
77 char **outbuf, size_t *outbytesleft);
78 void *cd_direct, *cd_pull, *cd_push;
79 char *from_name, *to_name;
80} *smb_iconv_t;
81
82/* string manipulation flags */
83#define STR_TERMINATE 1
84#define STR_UPPER 2
85#define STR_ASCII 4
86#define STR_UNICODE 8
87#define STR_NOALIGN 16
88#define STR_NO_RANGE_CHECK 32
89#define STR_LEN8BIT 64
90#define STR_TERMINATE_ASCII 128 /* only terminate if ascii */
91#define STR_LEN_NOTERM 256 /* the length field is the unterminated length */
92
93struct loadparm_context;
94struct smb_iconv_handle;
95
96char *strchr_m(const char *s, char c);
97/**
98 * Calculate the number of units (8 or 16-bit, depending on the
99 * destination charset), that would be needed to convert the input
100 * string which is expected to be in in src_charset encoding to the
101 * destination charset (which should be a unicode charset).
102 */
103size_t strlen_m_ext_handle(struct smb_iconv_handle *ic,
104 const char *s, charset_t src_charset, charset_t dst_charset);
105size_t strlen_m_ext(const char *s, charset_t src_charset, charset_t dst_charset);
106size_t strlen_m_ext_term(const char *s, charset_t src_charset,
107 charset_t dst_charset);
108size_t strlen_m_ext_term_null(const char *s,
109 charset_t src_charset,
110 charset_t dst_charset);
111size_t strlen_m(const char *s);
112size_t strlen_m_term(const char *s);
113size_t strlen_m_term_null(const char *s);
114char *alpha_strcpy(char *dest, const char *src, const char *other_safe_chars, size_t maxlength);
115void string_replace_m(char *s, char oldc, char newc);
116bool strcsequal(const char *s1,const char *s2);
117bool strequal_m(const char *s1, const char *s2);
118int strncasecmp_m(const char *s1, const char *s2, size_t n);
119int strncasecmp_m_handle(struct smb_iconv_handle *iconv_handle,
120 const char *s1, const char *s2, size_t n);
121bool next_token(const char **ptr,char *buff, const char *sep, size_t bufsize);
122int strcasecmp_m_handle(struct smb_iconv_handle *iconv_handle,
123 const char *s1, const char *s2);
124int strcasecmp_m(const char *s1, const char *s2);
125size_t count_chars_m(const char *s, char c);
126char *strupper_talloc(TALLOC_CTX *ctx, const char *src);
127char *talloc_strdup_upper(TALLOC_CTX *ctx, const char *src);
128char *strupper_talloc_n_handle(struct smb_iconv_handle *iconv_handle,
129 TALLOC_CTX *ctx, const char *src, size_t n);
130char *strupper_talloc_n(TALLOC_CTX *ctx, const char *src, size_t n);
131 char *strlower_talloc_handle(struct smb_iconv_handle *iconv_handle,
132 TALLOC_CTX *ctx, const char *src);
133char *strlower_talloc(TALLOC_CTX *ctx, const char *src);
134bool strhasupper(const char *string);
135bool strhaslower_handle(struct smb_iconv_handle *ic,
136 const char *string);
137bool strhaslower(const char *string);
138bool strhasupper_handle(struct smb_iconv_handle *ic,
139 const char *string);
140char *strrchr_m(const char *s, char c);
141char *strchr_m(const char *s, char c);
142char *strstr_m(const char *src, const char *findstr);
143
144bool push_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src, size_t *converted_size);
145bool push_ucs2_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src, size_t *converted_size);
146bool push_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src, size_t *converted_size);
147bool pull_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src, size_t *converted_size);
148bool pull_ucs2_talloc(TALLOC_CTX *ctx, char **dest, const smb_ucs2_t *src, size_t *converted_size);
149bool pull_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src, size_t *converted_size);
150ssize_t push_string(void *dest, const char *src, size_t dest_len, int flags);
151ssize_t pull_string(char *dest, const void *src, size_t dest_len, size_t src_len, int flags);
152
153bool convert_string_talloc(TALLOC_CTX *ctx,
154 charset_t from, charset_t to,
155 void const *src, size_t srclen,
156 void *dest, size_t *converted_size);
157
158bool convert_string(charset_t from, charset_t to,
159 void const *src, size_t srclen,
160 void *dest, size_t destlen,
161 size_t *converted_size);
162bool convert_string_error(charset_t from, charset_t to,
163 void const *src, size_t srclen,
164 void *dest, size_t destlen,
165 size_t *converted_size);
166
167extern struct smb_iconv_handle *global_iconv_handle;
168struct smb_iconv_handle *get_iconv_handle(void);
169struct smb_iconv_handle *get_iconv_testing_handle(TALLOC_CTX *mem_ctx,
170 const char *dos_charset,
171 const char *unix_charset,
172 bool use_builtin_handlers);
173smb_iconv_t get_conv_handle(struct smb_iconv_handle *ic,
174 charset_t from, charset_t to);
175const char *charset_name(struct smb_iconv_handle *ic, charset_t ch);
176
177codepoint_t next_codepoint_ext(const char *str, size_t len,
178 charset_t src_charset, size_t *size);
179codepoint_t next_codepoint(const char *str, size_t *size);
180ssize_t push_codepoint(char *str, codepoint_t c);
181
182/* codepoints */
183codepoint_t next_codepoint_handle_ext(struct smb_iconv_handle *ic,
184 const char *str, size_t len,
185 charset_t src_charset,
186 size_t *size);
187codepoint_t next_codepoint_handle(struct smb_iconv_handle *ic,
188 const char *str, size_t *size);
189ssize_t push_codepoint_handle(struct smb_iconv_handle *ic,
190 char *str, codepoint_t c);
191
192codepoint_t toupper_m(codepoint_t val);
193codepoint_t tolower_m(codepoint_t val);
194bool islower_m(codepoint_t val);
195bool isupper_m(codepoint_t val);
196int codepoint_cmpi(codepoint_t c1, codepoint_t c2);
197
198/* Iconv convenience functions */
199struct smb_iconv_handle *smb_iconv_handle_reinit(TALLOC_CTX *mem_ctx,
200 const char *dos_charset,
201 const char *unix_charset,
202 bool use_builtin_handlers,
203 struct smb_iconv_handle *old_ic);
204
205bool convert_string_handle(struct smb_iconv_handle *ic,
206 charset_t from, charset_t to,
207 void const *src, size_t srclen,
208 void *dest, size_t destlen, size_t *converted_size);
209bool convert_string_error_handle(struct smb_iconv_handle *ic,
210 charset_t from, charset_t to,
211 void const *src, size_t srclen,
212 void *dest, size_t destlen,
213 size_t *converted_size);
214
215bool convert_string_talloc_handle(TALLOC_CTX *ctx,
216 struct smb_iconv_handle *ic,
217 charset_t from, charset_t to,
218 void const *src, size_t srclen,
219 void *dest, size_t *converted_size);
220/* iconv */
221smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode);
222int smb_iconv_close(smb_iconv_t cd);
223size_t smb_iconv(smb_iconv_t cd,
224 const char **inbuf, size_t *inbytesleft,
225 char **outbuf, size_t *outbytesleft);
226smb_iconv_t smb_iconv_open_ex(TALLOC_CTX *mem_ctx, const char *tocode,
227 const char *fromcode, bool use_builtin_handlers);
228
229void smb_init_locale(void);
230
231/* The following definitions come from util_unistr_w.c */
232
233size_t strlen_w(const smb_ucs2_t *src);
234size_t strnlen_w(const smb_ucs2_t *src, size_t max);
235smb_ucs2_t *strchr_w(const smb_ucs2_t *s, smb_ucs2_t c);
236smb_ucs2_t *strchr_wa(const smb_ucs2_t *s, char c);
237smb_ucs2_t *strrchr_w(const smb_ucs2_t *s, smb_ucs2_t c);
238smb_ucs2_t *strnrchr_w(const smb_ucs2_t *s, smb_ucs2_t c, unsigned int n);
239smb_ucs2_t *strstr_w(const smb_ucs2_t *s, const smb_ucs2_t *ins);
240bool strlower_w(smb_ucs2_t *s);
241bool strupper_w(smb_ucs2_t *s);
242int strcasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
243int strncasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len);
244int strcmp_wa(const smb_ucs2_t *a, const char *b);
245smb_ucs2_t toupper_w(smb_ucs2_t v);
246
247#endif /* __CHARSET_H__ */
Note: See TracBrowser for help on using the repository browser.