1/* $OpenLDAP$ */ 2/* This work is part of OpenLDAP Software <http://www.openldap.org/>. 3 * 4 * Copyright 1998-2011 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 34static 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 59static 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 75char *(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 109char * 110ldap_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 124struct berval * 125ldap_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 144char * 145ldap_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 159struct berval * 160ldap_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