xref: /netbsd-src/external/bsd/openldap/dist/include/ldap_utf8.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: ldap_utf8.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron /* $OpenLDAP$ */
42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
52de962bdSlukem  *
6*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
72de962bdSlukem  * All rights reserved.
82de962bdSlukem  *
92de962bdSlukem  * Redistribution and use in source and binary forms, with or without
102de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
112de962bdSlukem  * Public License.
122de962bdSlukem  *
132de962bdSlukem  * A copy of this license is available in file LICENSE in the
142de962bdSlukem  * top-level directory of the distribution or, alternatively, at
152de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
162de962bdSlukem  */
172de962bdSlukem /* This notice applies to changes, created by or for Novell, Inc.,
182de962bdSlukem  * to preexisting works for which notices appear elsewhere in this file.
192de962bdSlukem  *
202de962bdSlukem  * Copyright (C) 2000 Novell, Inc. All Rights Reserved.
212de962bdSlukem  *
222de962bdSlukem  * THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
232de962bdSlukem  * USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO VERSION
242de962bdSlukem  * 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS AVAILABLE AT
252de962bdSlukem  * HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE" IN THE
262de962bdSlukem  * TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION OF THIS
272de962bdSlukem  * WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP PUBLIC
282de962bdSlukem  * LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT THE
292de962bdSlukem  * PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
302de962bdSlukem  */
312de962bdSlukem /* Note: A verbatim copy of version 2.0.1 of the OpenLDAP Public License
322de962bdSlukem  * can be found in the file "build/LICENSE-2.0.1" in this distribution
332de962bdSlukem  * of OpenLDAP Software.
342de962bdSlukem  */
352de962bdSlukem 
362de962bdSlukem #ifndef _LDAP_UTF8_H
372de962bdSlukem #define _LDAP_UTF8_H
382de962bdSlukem 
392de962bdSlukem #include <lber_types.h>	/* get ber_*_t */
402de962bdSlukem 
412de962bdSlukem /*
422de962bdSlukem  * UTF-8 Utility Routines
432de962bdSlukem  */
442de962bdSlukem 
452de962bdSlukem LDAP_BEGIN_DECL
462de962bdSlukem 
472de962bdSlukem #define LDAP_UCS4_INVALID (0x80000000U)
482de962bdSlukem typedef ber_int_t ldap_ucs4_t;
492de962bdSlukem 
502de962bdSlukem 
512de962bdSlukem /* LDAP_MAX_UTF8_LEN is 3 or 6 depending on size of wchar_t */
522de962bdSlukem #define LDAP_MAX_UTF8_LEN  ( sizeof(wchar_t) * 3/2 )
532de962bdSlukem 
542de962bdSlukem /* Unicode conversion routines  */
552de962bdSlukem LDAP_F( ldap_ucs4_t ) ldap_x_utf8_to_ucs4( LDAP_CONST char * p );
562de962bdSlukem LDAP_F( int ) ldap_x_ucs4_to_utf8( ldap_ucs4_t c, char *buf );
572de962bdSlukem 
582de962bdSlukem 
592de962bdSlukem /*
602de962bdSlukem  * Wide Char / UTF-8 Conversion Routines
612de962bdSlukem  */
622de962bdSlukem 
632de962bdSlukem /* UTF-8 character to Wide Char */
642de962bdSlukem LDAP_F(int) ldap_x_utf8_to_wc LDAP_P((
652de962bdSlukem 	wchar_t *wchar, LDAP_CONST char *utf8char ));
662de962bdSlukem 
672de962bdSlukem /* UTF-8 string to Wide Char string */
682de962bdSlukem LDAP_F(int) ldap_x_utf8s_to_wcs LDAP_P((
692de962bdSlukem 	wchar_t *wcstr, LDAP_CONST char *utf8str, size_t count ));
702de962bdSlukem 
712de962bdSlukem /* Wide Char to UTF-8 character */
722de962bdSlukem LDAP_F(int) ldap_x_wc_to_utf8 LDAP_P((
732de962bdSlukem 	char *utf8char, wchar_t wchar, size_t count ));
742de962bdSlukem 
752de962bdSlukem /* Wide Char string to UTF-8 string */
762de962bdSlukem LDAP_F(int) ldap_x_wcs_to_utf8s LDAP_P((
772de962bdSlukem 	char *utf8str, LDAP_CONST wchar_t *wcstr, size_t count ));
782de962bdSlukem 
792de962bdSlukem /*
802de962bdSlukem  * MultiByte Char / UTF-8 Conversion Routines
812de962bdSlukem  */
822de962bdSlukem 
832de962bdSlukem /* UTF-8 character to MultiByte character */
842de962bdSlukem LDAP_F(int) ldap_x_utf8_to_mb LDAP_P((
852de962bdSlukem 	char *mbchar, LDAP_CONST char *utf8char,
862de962bdSlukem 	int (*ldap_f_wctomb)( char *mbchar, wchar_t wchar )));
872de962bdSlukem 
882de962bdSlukem /* UTF-8 string to MultiByte string */
892de962bdSlukem LDAP_F(int) ldap_x_utf8s_to_mbs LDAP_P((
902de962bdSlukem 	char *mbstr, LDAP_CONST char *utf8str, size_t count,
912de962bdSlukem 	size_t (*ldap_f_wcstombs)( char *mbstr,
922de962bdSlukem 		LDAP_CONST wchar_t *wcstr, size_t count) ));
932de962bdSlukem 
942de962bdSlukem /* MultiByte character to UTF-8 character */
952de962bdSlukem LDAP_F(int) ldap_x_mb_to_utf8 LDAP_P((
962de962bdSlukem 	char *utf8char, LDAP_CONST char *mbchar, size_t mbsize,
972de962bdSlukem 	int (*ldap_f_mbtowc)( wchar_t *wchar,
982de962bdSlukem 		LDAP_CONST char *mbchar, size_t count) ));
992de962bdSlukem 
1002de962bdSlukem /* MultiByte string to UTF-8 string */
1012de962bdSlukem LDAP_F(int) ldap_x_mbs_to_utf8s LDAP_P((
1022de962bdSlukem 	char *utf8str, LDAP_CONST char *mbstr, size_t count,
1032de962bdSlukem 	size_t (*ldap_f_mbstowcs)( wchar_t *wcstr,
1042de962bdSlukem 		LDAP_CONST char *mbstr, size_t count) ));
1052de962bdSlukem 
1062de962bdSlukem LDAP_END_DECL
1072de962bdSlukem 
1082de962bdSlukem #endif /* _LDAP_UTF8_H */
109