]> git.sur5r.net Git - openldap/blob - libraries/libldap/string.c
dbedf5741f09900f5dae6798c571d12cabdb1a58
[openldap] / libraries / libldap / string.c
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6
7 /*
8  * Locale-specific 1-byte character versions
9  * See utf-8.c for UTF-8 versions
10  */
11
12 #include "portable.h"
13
14 #include <ac/stdlib.h>
15 #include <ac/string.h>
16 #include <ac/time.h>
17 #include <ac/ctype.h>
18
19 #include "ldap-int.h"
20
21
22 #if defined ( HAVE_STRSPN )
23 #define int_strspn strspn
24 #else
25 static int int_strspn( const char *str, const char *delim )
26 {
27         int pos;
28         const char *p=delim;
29
30         for( pos=0; (*str) ; pos++,str++) {
31                 if (*str!=*p) {
32                         for( p=delim; (*p) ; p++ ) {
33                                 if (*str==*p) {
34                                         break;
35                                 }
36                         }
37                 }
38
39                 if (*p=='\0') {
40                         return pos;
41                 }
42         }
43         return pos;
44 }
45 #endif
46
47 #if defined( HAVE_STRPBRK )
48 #define int_strpbrk strpbrk
49 #else
50 static char *(int_strpbrk)( const char *str, const char *accept )
51 {
52         const char *p;
53
54         for( ; (*str) ; str++ ) {
55                 for( p=accept; (*p) ; p++) {
56                         if (*str==*p) {
57                                 return str;
58                         }
59                 }
60         }
61
62         return NULL;
63 }
64 #endif
65
66 char *(ldap_pvt_strtok)( char *str, const char *delim, char **pos )
67 {
68         char *p;
69
70         if (pos==NULL) {
71                 return NULL;
72         }
73
74         if (str==NULL) {
75                 if (*pos==NULL) {
76                         return NULL;
77                 }
78
79                 str=*pos;
80         }
81
82         /* skip any initial delimiters */
83         str += int_strspn( str, delim );
84         if (*str == '\0') {
85                 return NULL;
86         }
87
88         p = int_strpbrk( str, delim );
89         if (p==NULL) {
90                 *pos = NULL;
91
92         } else {
93                 *p ='\0';
94                 *pos = p+1;
95         }
96
97         return str;
98 }
99
100 char *
101 ldap_pvt_str2upper( char *str )
102 {
103         char    *s;
104
105         /* to upper */
106         if ( str ) {
107                 for ( s = str; *s; s++ ) {
108                         *s = TOUPPER( (unsigned char) *s );
109                 }
110         }
111
112         return( str );
113 }
114
115 struct berval *
116 ldap_pvt_str2upperbv( char *str, struct berval *bv )
117 {
118         char    *s = NULL;
119
120         assert( bv );
121
122         /* to upper */
123         if ( str ) {
124                 for ( s = str; *s; s++ ) {
125                         *s = TOUPPER( (unsigned char) *s );
126                 }
127         }
128
129         bv->bv_val = str;
130         bv->bv_len = (ber_len_t)(s - str);
131         
132         return( bv );
133 }
134
135 char *
136 ldap_pvt_str2lower( char *str )
137 {
138         char    *s;
139
140         /* to lower */
141         if ( str ) {
142                 for ( s = str; *s; s++ ) {
143                         *s = TOLOWER( (unsigned char) *s );
144                 }
145         }
146
147         return( str );
148 }
149
150 struct berval *
151 ldap_pvt_str2lowerbv( char *str, struct berval *bv )
152 {
153         char    *s = NULL;
154
155         assert( bv );
156
157         /* to lower */
158         if ( str ) {
159                 for ( s = str; *s; s++ ) {
160                         *s = TOLOWER( (unsigned char) *s );
161                 }
162         }
163
164         bv->bv_val = str;
165         bv->bv_len = (ber_len_t)(s - str);
166
167         return( bv );
168 }