/* Copyright (C) 2000 MySQL AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* Functions to convert to lover_case and to upper_case in scandinavia. case_sort converts a character string to a representaion that can be compared by strcmp to find with is alfabetical bigger. (lower- and uppercase letters is compared as the same) */ #include "mysys_priv.h" #include #ifndef SCO #include #endif /* string to uppercase */ void caseup_str(my_string str) { #ifdef USE_MB if (use_mb(default_charset_info)) { register uint32 l; register char *end=str+strlen(str); while (*str) { if ((l=my_ismbchar(default_charset_info, str,end))) str+=l; else *str=toupper(*str),++str; } } else #endif while ((*str = toupper(*str)) != 0) str++; } /* caseup_str */ /* string to lowercase */ void casedn_str(my_string str) { #ifdef USE_MB if (use_mb(default_charset_info)) { register uint32 l; register char *end=str+strlen(str); while (*str) { if ((l=my_ismbchar(default_charset_info, str,end))) str+=l; else *str=tolower(*str),++str; } } else #endif while ((*str= tolower(*str)) != 0) str++; } /* casedn_str */ /* to uppercase */ void caseup(my_string str, uint length) { #ifdef USE_MB if (use_mb(default_charset_info)) { register uint32 l; register char *end=str+length; while (str0 ; length--, str++) *str= toupper(*str); } /* caseup */ /* to lowercase */ void casedn(my_string str, uint length) { #ifdef USE_MB if (use_mb(default_charset_info)) { register uint32 l; register char *end=str+length; while (str0 ; length--, str++) *str= tolower(*str); } /* casedn */ /* to sort-string that can be compared to get text in order */ void case_sort(my_string str, uint length) { for ( ; length>0 ; length--, str++) *str= (char) my_sort_order[(uchar) *str]; } /* case_sort */ /* find string in another with no case_sensivity */ /* ToDo: This function should be modified to support multibyte charset. However it is not used untill 3.23.5. Wei He (hewei@mail.ied.ac.cn) */ my_string my_strcasestr(const char *str, const char *search) { uchar *i,*j,*pos; pos=(uchar*) str; skipp: while (*pos != '\0') { if (toupper((uchar) *pos++) == toupper((uchar) *search)) { i=(uchar*) pos; j=(uchar*) search+1; while (*j) if (toupper(*i++) != toupper(*j++)) goto skipp; return ((char*) pos-1); } } return ((my_string) 0); } /* strcstr */ /* compare strings without regarding to case */ int my_strcasecmp(const char *s, const char *t) { #ifdef USE_MB if (use_mb(default_charset_info)) { register uint32 l; register const char *end=s+strlen(s); while (s