xref: /netbsd-src/external/bsd/openldap/dist/include/ldap_utf8.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1 /*	$NetBSD: ldap_utf8.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
2 
3 /* $OpenLDAP$ */
4 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5  *
6  * Copyright 1998-2021 The OpenLDAP Foundation.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted only as authorized by the OpenLDAP
11  * Public License.
12  *
13  * A copy of this license is available in file LICENSE in the
14  * top-level directory of the distribution or, alternatively, at
15  * <http://www.OpenLDAP.org/license.html>.
16  */
17 /* This notice applies to changes, created by or for Novell, Inc.,
18  * to preexisting works for which notices appear elsewhere in this file.
19  *
20  * Copyright (C) 2000 Novell, Inc. All Rights Reserved.
21  *
22  * THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
23  * USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO VERSION
24  * 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS AVAILABLE AT
25  * HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE" IN THE
26  * TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION OF THIS
27  * WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP PUBLIC
28  * LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT THE
29  * PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
30  */
31 /* Note: A verbatim copy of version 2.0.1 of the OpenLDAP Public License
32  * can be found in the file "build/LICENSE-2.0.1" in this distribution
33  * of OpenLDAP Software.
34  */
35 
36 #ifndef _LDAP_UTF8_H
37 #define _LDAP_UTF8_H
38 
39 #include <lber_types.h>	/* get ber_*_t */
40 
41 /*
42  * UTF-8 Utility Routines
43  */
44 
45 LDAP_BEGIN_DECL
46 
47 #define LDAP_UCS4_INVALID (0x80000000U)
48 typedef ber_int_t ldap_ucs4_t;
49 
50 
51 /* LDAP_MAX_UTF8_LEN is 3 or 6 depending on size of wchar_t */
52 #define LDAP_MAX_UTF8_LEN  ( sizeof(wchar_t) * 3/2 )
53 
54 /* Unicode conversion routines  */
55 LDAP_F( ldap_ucs4_t ) ldap_x_utf8_to_ucs4( LDAP_CONST char * p );
56 LDAP_F( int ) ldap_x_ucs4_to_utf8( ldap_ucs4_t c, char *buf );
57 
58 
59 /*
60  * Wide Char / UTF-8 Conversion Routines
61  */
62 
63 /* UTF-8 character to Wide Char */
64 LDAP_F(int) ldap_x_utf8_to_wc LDAP_P((
65 	wchar_t *wchar, LDAP_CONST char *utf8char ));
66 
67 /* UTF-8 string to Wide Char string */
68 LDAP_F(int) ldap_x_utf8s_to_wcs LDAP_P((
69 	wchar_t *wcstr, LDAP_CONST char *utf8str, size_t count ));
70 
71 /* Wide Char to UTF-8 character */
72 LDAP_F(int) ldap_x_wc_to_utf8 LDAP_P((
73 	char *utf8char, wchar_t wchar, size_t count ));
74 
75 /* Wide Char string to UTF-8 string */
76 LDAP_F(int) ldap_x_wcs_to_utf8s LDAP_P((
77 	char *utf8str, LDAP_CONST wchar_t *wcstr, size_t count ));
78 
79 /*
80  * MultiByte Char / UTF-8 Conversion Routines
81  */
82 
83 /* UTF-8 character to MultiByte character */
84 LDAP_F(int) ldap_x_utf8_to_mb LDAP_P((
85 	char *mbchar, LDAP_CONST char *utf8char,
86 	int (*ldap_f_wctomb)( char *mbchar, wchar_t wchar )));
87 
88 /* UTF-8 string to MultiByte string */
89 LDAP_F(int) ldap_x_utf8s_to_mbs LDAP_P((
90 	char *mbstr, LDAP_CONST char *utf8str, size_t count,
91 	size_t (*ldap_f_wcstombs)( char *mbstr,
92 		LDAP_CONST wchar_t *wcstr, size_t count) ));
93 
94 /* MultiByte character to UTF-8 character */
95 LDAP_F(int) ldap_x_mb_to_utf8 LDAP_P((
96 	char *utf8char, LDAP_CONST char *mbchar, size_t mbsize,
97 	int (*ldap_f_mbtowc)( wchar_t *wchar,
98 		LDAP_CONST char *mbchar, size_t count) ));
99 
100 /* MultiByte string to UTF-8 string */
101 LDAP_F(int) ldap_x_mbs_to_utf8s LDAP_P((
102 	char *utf8str, LDAP_CONST char *mbstr, size_t count,
103 	size_t (*ldap_f_mbstowcs)( wchar_t *wcstr,
104 		LDAP_CONST char *mbstr, size_t count) ));
105 
106 LDAP_END_DECL
107 
108 #endif /* _LDAP_UTF8_H */
109