1 /* value.c - routines for dealing with values */
4 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
5 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
13 #include <ac/socket.h>
14 #include <ac/string.h>
23 struct berval ***vals,
24 struct berval **addvals
29 for ( nn = 0; addvals != NULL && addvals[nn] != NULL; nn++ )
32 if ( *vals == NULL ) {
33 *vals = (struct berval **) ch_malloc( (nn + 1)
34 * sizeof(struct berval *) );
37 for ( n = 0; (*vals)[n] != NULL; n++ )
39 *vals = (struct berval **) ch_realloc( (char *) *vals,
40 (n + nn + 1) * sizeof(struct berval *) );
43 for ( i = 0, j = 0; i < nn; i++ ) {
44 if ( addvals[i]->bv_len > 0 ) {
45 (*vals)[n + j] = ber_bvdup( addvals[i] );
46 if( (*vals)[n + j++] == NULL ) break;
49 (*vals)[n + j] = NULL;
54 #ifdef SLAPD_SCHEMA_NOT_COMPAT
55 /* not yet implemented */
59 struct berval ***vals,
60 struct berval **addvals,
68 if ( *maxvals == 0 ) {
71 need = nvals + naddvals + 1;
72 while ( *maxvals < need ) {
74 *vals = (struct berval **) ch_realloc( (char *) *vals,
75 *maxvals * sizeof(struct berval *) );
78 for ( i = 0, j = 0; i < naddvals; i++ ) {
79 if ( addvals[i]->bv_len > 0 ) {
80 (*vals)[nvals + j] = ber_bvdup( addvals[i] );
81 if( (*vals)[nvals + j] != NULL ) j++;
84 (*vals)[nvals + j] = NULL;
90 #ifdef SLAPD_SCHEMA_NOT_COMPAT
93 AttributeDescription *ad,
98 /* not yet implemented */
111 if ( ! (syntax & SYNTAX_CIS) ) {
115 if ( syntax & SYNTAX_DN ) {
116 (void) dn_normalize( s );
121 for ( d = s; *s; s++ ) {
122 if ( (syntax & SYNTAX_TEL) && (*s == ' ' || *s == '-') ) {
125 *d++ = TOUPPER( (unsigned char) *s );
131 #ifdef SLAPD_SCHEMA_NOT_COMPAT
132 /* not yet implemented */
139 int normalize /* 1 => arg 1; 2 => arg 2; 3 => both */
144 if ( normalize & 1 ) {
145 v1 = ber_bvdup( v1 );
146 value_normalize( v1->bv_val, syntax );
148 if ( normalize & 2 ) {
149 v2 = ber_bvdup( v2 );
150 value_normalize( v2->bv_val, syntax );
155 case (SYNTAX_CIS | SYNTAX_TEL):
156 case (SYNTAX_CIS | SYNTAX_DN):
157 rc = strcasecmp( v1->bv_val, v2->bv_val );
161 rc = strcmp( v1->bv_val, v2->bv_val );
164 default: /* Unknown syntax */
166 rc = (v1->bv_len == v2->bv_len
167 ? memcmp( v1->bv_val, v2->bv_val, v1->bv_len )
168 : v1->bv_len > v2->bv_len ? 1 : -1);
172 if ( normalize & 1 ) {
175 if ( normalize & 2 ) {
184 struct berval **vals,
192 for ( i = 0; vals[i] != NULL; i++ ) {
193 if ( value_cmp( vals[i], v, syntax, normalize ) == 0 ) {