Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/ldap/libldap/string.c
4394 views
1
/* $OpenLDAP$ */
2
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3
*
4
* Copyright 1998-2024 The OpenLDAP Foundation.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted only as authorized by the OpenLDAP
9
* Public License.
10
*
11
* A copy of this license is available in the file LICENSE in the
12
* top-level directory of the distribution or, alternatively, at
13
* <http://www.OpenLDAP.org/license.html>.
14
*/
15
16
/*
17
* Locale-specific 1-byte character versions
18
* See utf-8.c for UTF-8 versions
19
*/
20
21
#include "portable.h"
22
23
#include <ac/stdlib.h>
24
#include <ac/string.h>
25
#include <ac/time.h>
26
#include <ac/ctype.h>
27
28
#include "ldap-int.h"
29
30
31
#if defined ( HAVE_STRSPN )
32
#define int_strspn strspn
33
#else
34
static int int_strspn( const char *str, const char *delim )
35
{
36
int pos;
37
const char *p=delim;
38
39
for( pos=0; (*str) ; pos++,str++) {
40
if (*str!=*p) {
41
for( p=delim; (*p) ; p++ ) {
42
if (*str==*p) {
43
break;
44
}
45
}
46
}
47
48
if (*p=='\0') {
49
return pos;
50
}
51
}
52
return pos;
53
}
54
#endif
55
56
#if defined( HAVE_STRPBRK )
57
#define int_strpbrk strpbrk
58
#else
59
static char *(int_strpbrk)( const char *str, const char *accept )
60
{
61
const char *p;
62
63
for( ; (*str) ; str++ ) {
64
for( p=accept; (*p) ; p++) {
65
if (*str==*p) {
66
return str;
67
}
68
}
69
}
70
71
return NULL;
72
}
73
#endif
74
75
char *(ldap_pvt_strtok)( char *str, const char *delim, char **pos )
76
{
77
char *p;
78
79
if (pos==NULL) {
80
return NULL;
81
}
82
83
if (str==NULL) {
84
if (*pos==NULL) {
85
return NULL;
86
}
87
88
str=*pos;
89
}
90
91
/* skip any initial delimiters */
92
str += int_strspn( str, delim );
93
if (*str == '\0') {
94
return NULL;
95
}
96
97
p = int_strpbrk( str, delim );
98
if (p==NULL) {
99
*pos = NULL;
100
101
} else {
102
*p ='\0';
103
*pos = p+1;
104
}
105
106
return str;
107
}
108
109
char *
110
ldap_pvt_str2upper( char *str )
111
{
112
char *s;
113
114
/* to upper */
115
if ( str ) {
116
for ( s = str; *s; s++ ) {
117
*s = TOUPPER( (unsigned char) *s );
118
}
119
}
120
121
return( str );
122
}
123
124
struct berval *
125
ldap_pvt_str2upperbv( char *str, struct berval *bv )
126
{
127
char *s = NULL;
128
129
assert( bv != NULL );
130
131
/* to upper */
132
if ( str ) {
133
for ( s = str; *s; s++ ) {
134
*s = TOUPPER( (unsigned char) *s );
135
}
136
}
137
138
bv->bv_val = str;
139
bv->bv_len = (ber_len_t)(s - str);
140
141
return( bv );
142
}
143
144
char *
145
ldap_pvt_str2lower( char *str )
146
{
147
char *s;
148
149
/* to lower */
150
if ( str ) {
151
for ( s = str; *s; s++ ) {
152
*s = TOLOWER( (unsigned char) *s );
153
}
154
}
155
156
return( str );
157
}
158
159
struct berval *
160
ldap_pvt_str2lowerbv( char *str, struct berval *bv )
161
{
162
char *s = NULL;
163
164
assert( bv != NULL );
165
166
/* to lower */
167
if ( str ) {
168
for ( s = str; *s; s++ ) {
169
*s = TOLOWER( (unsigned char) *s );
170
}
171
}
172
173
bv->bv_val = str;
174
bv->bv_len = (ber_len_t)(s - str);
175
176
return( bv );
177
}
178
179