3 * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
10 * These routines are not optimized.
17 #include <ac/stdlib.h>
19 #include <ac/socket.h>
20 #include <ac/string.h>
24 #include "ldap_defaults.h"
26 #define UTF8_ISASCII(u) ( !((u) & ~0x7f) )
28 ber_len_t ldap_utf8_bytes( const char * p )
32 for( bytes=0; p[bytes] ; bytes++ ) {
39 ber_len_t ldap_utf8_chars( const char * p )
41 /* could be optimized */
46 for( i=0; u[i]; i++) {
47 if ( u[i] & 0xC0 != 0x80 ) chars++;
53 int ldap_utf8_charlen( const char * p )
57 if ((c & 0xFE ) == 0xFC) {
60 if ((c & 0xFC ) == 0xF8) {
63 if ((c & 0xF8 ) == 0xF0) {
66 if ((c & 0xF0 ) == 0xE0) {
69 if ((c & 0xE0 ) == 0xC0) {
72 if ((c & 0x80 ) == 0x80) {
80 char* ldap_utf8_next( char * p )
82 int len = ldap_utf8_charlen( p );
84 return len ? &p[len] : NULL;
87 char* ldap_utf8_prev( char * p )
92 for( i = -1; i >= -6 ; i-- ) {
93 if ( u[i] & 0xC0 != 0x80 ) return &p[i];
99 int ldap_utf8_isascii( const char * p )
101 unsigned c = * (const unsigned char *) p;
102 return UTF8_ISASCII(c);
105 int ldap_utf8_isdigit( const char * p )
107 unsigned c = * (const unsigned char *) p;
109 if(!UTF8_ISASCII(c)) return 0;
111 return c >= '0' && c <= '9';
114 int ldap_utf8_isxdigit( const char * p )
116 unsigned c = * (const unsigned char *) p;
118 if(!UTF8_ISASCII(c)) return 0;
120 return ( c >= '0' && c <= '9' )
121 || ( c >= 'A' && c <= 'F' )
122 || ( c >= 'a' && c <= 'f' );
125 int ldap_utf8_isalpha( const char * p )
127 unsigned c = * (const unsigned char *) p;
129 if(!UTF8_ISASCII(c)) return 0;
131 return ( c >= 'A' && c <= 'Z' )
132 || ( c >= 'a' && c <= 'z' );
135 int ldap_utf8_isalnum( const char * p )
137 unsigned c = * (const unsigned char *) p;
139 if(!UTF8_ISASCII(c)) return 0;
141 return ( c >= '0' && c <= '9' )
142 || ( c >= 'A' && c <= 'Z' )
143 || ( c >= 'a' && c <= 'z' );
146 int ldap_utf8_islower( const char * p )
148 unsigned c = * (const unsigned char *) p;
150 if(!UTF8_ISASCII(c)) return 0;
152 return ( c >= 'a' && c <= 'z' );
155 int ldap_utf8_isupper( const char * p )
157 unsigned c = * (const unsigned char *) p;
159 if(!UTF8_ISASCII(c)) return 0;
161 return ( c >= 'A' && c <= 'Z' );
164 int ldap_utf8_isspace( const char * p )
166 unsigned c = * (const unsigned char *) p;
168 if(!UTF8_ISASCII(c)) return 0;