diff options
| author | MySQL Team <mysql@php.net> | 2000-08-22 09:02:46 +0000 | 
|---|---|---|
| committer | MySQL Team <mysql@php.net> | 2000-08-22 09:02:46 +0000 | 
| commit | 4b1380e31c0f6e76c629611c7ba8c4e2e961a2fd (patch) | |
| tree | 853d1881366287956bbfa7edf2f4edc0ae62637e /ext/mysql/libmysql/mf_casecnv.c | |
| parent | bac08af4cb97ea7e9db18a4267fb070264792f2f (diff) | |
| download | php-git-4b1380e31c0f6e76c629611c7ba8c4e2e961a2fd.tar.gz | |
New files for MySQL 3.23.23 client library. New files are for qouting
using different character sets.
Diffstat (limited to 'ext/mysql/libmysql/mf_casecnv.c')
| -rw-r--r-- | ext/mysql/libmysql/mf_casecnv.c | 203 | 
1 files changed, 130 insertions, 73 deletions
diff --git a/ext/mysql/libmysql/mf_casecnv.c b/ext/mysql/libmysql/mf_casecnv.c index 6b24182b9c..1d63527eb7 100644 --- a/ext/mysql/libmysql/mf_casecnv.c +++ b/ext/mysql/libmysql/mf_casecnv.c @@ -1,5 +1,19 @@ -/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB -   This file is public domain and comes with NO WARRANTY of any kind */ +/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB +    +   This library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Library General Public +   License as published by the Free Software Foundation; either +   version 2 of the License, or (at your option) any later version. +    +   This library 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 +   Library General Public License for more details. +    +   You should have received a copy of the GNU Library General Public +   License along with this library; 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. @@ -18,16 +32,17 @@ void caseup_str(my_string str)  {  #ifdef USE_MB    register uint32 l; -  register char *end=str+strlen(str); -  while (*str) -  { -    if ((l=ismbchar(str,end))) str+=l; -    else *str=toupper(*str),++str; -  } -#else -  while ((*str = toupper(*str)) != 0) -    str++; +  register char *end=str+(uint) strlen(str); +  if (use_mb(default_charset_info)) +    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 */ @@ -36,16 +51,17 @@ void casedn_str(my_string str)  {  #ifdef USE_MB    register uint32 l; -  register char *end=str+strlen(str); -  while (*str) -  { -    if ((l=ismbchar(str,end))) str+=l; -    else *str=tolower(*str),++str; -  } -#else -  while ((*str= tolower(*str)) != 0) -    str++; +  register char *end=str+(uint) strlen(str); +  if (use_mb(default_charset_info)) +    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 */ @@ -56,15 +72,16 @@ void caseup(my_string str, uint length)  #ifdef USE_MB    register uint32 l;    register char *end=str+length; -  while (str<end) -  { -    if ((l=ismbchar(str,end))) str+=l; -    else *str=toupper(*str),++str; -  } -#else -  for ( ; length>0 ; length--, str++) -    *str= toupper(*str); +  if (use_mb(default_charset_info)) +    while (str<end) +    { +      if ((l=my_ismbchar(default_charset_info, str,end))) str+=l; +      else *str=toupper(*str),++str; +    } +  else  #endif +    for ( ; length>0 ; length--, str++) +      *str= toupper(*str);  } /* caseup */  	/* to lowercase */ @@ -74,15 +91,16 @@ void casedn(my_string str, uint length)  #ifdef USE_MB    register uint32 l;    register char *end=str+length; -  while (str<end) -  { -    if ((l=ismbchar(str,end))) str+=l; -    else *str=tolower(*str),++str; -  } -#else -  for ( ; length>0 ; length--, str++) -    *str= tolower(*str); +  if (use_mb(default_charset_info)) +    while (str<end) +    { +      if ((l=my_ismbchar(default_charset_info, str,end))) str+=l; +      else *str=tolower(*str),++str; +    } +  else  #endif +    for ( ; length>0 ; length--, str++) +      *str= tolower(*str);  } /* casedn */  	/* to sort-string that can be compared to get text in order */ @@ -100,7 +118,7 @@ void case_sort(my_string str, uint length)  	 Wei He (hewei@mail.ied.ac.cn)  */ -my_string strcasestr(const char *str, const char *search) +my_string my_strcasestr(const char *str, const char *search)  {   uchar *i,*j,*pos; @@ -108,7 +126,8 @@ my_string strcasestr(const char *str, const char *search)  skipp:   while (*pos != '\0')   { -   if (toupper((uchar) *pos++) == toupper((uchar) *search)) { +   if (toupper((uchar) *pos++) == toupper((uchar) *search)) +   {       i=(uchar*) pos; j=(uchar*) search+1;       while (*j)         if (toupper(*i++) != toupper(*j++)) goto skipp; @@ -125,23 +144,28 @@ int my_strcasecmp(const char *s, const char *t)  {  #ifdef USE_MB    register uint32 l; -  register const char *end=s+strlen(s); -  while (s<end) +  register const char *end=s+(uint) strlen(s); +  if (use_mb(default_charset_info))    { -    if ((l=ismbchar(s,end))) +    while (s<end)      { -      while (l--) -	if (*s++ != *t++) return 1; +      if ((l=my_ismbchar(default_charset_info, s,end))) +      { +        while (l--) +          if (*s++ != *t++) return 1; +      } +      else if (my_ismbhead(default_charset_info, *t)) return 1; +      else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1;      } -    else if (ismbhead(*t)) return 1; -    else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1; +    return *t;    } -  return *t; -#else -  while (toupper((uchar) *s) == toupper((uchar) *t++)) -    if (!*s++) return 0; -  return ((int) toupper((uchar) s[0]) - (int) toupper((uchar) t[-1])); +  else  #endif +  { +    while (toupper((uchar) *s) == toupper((uchar) *t++)) +      if (!*s++) return 0; +    return ((int) toupper((uchar) s[0]) - (int) toupper((uchar) t[-1])); +  }  } @@ -150,46 +174,79 @@ int my_casecmp(const char *s, const char *t, uint len)  #ifdef USE_MB    register uint32 l;    register const char *end=s+len; -  while (s<end) +  if (use_mb(default_charset_info))    { -    if ((l=ismbchar(s,end))) +    while (s<end)      { -      while (l--) -	if (*s++ != *t++) return 1; +      if ((l=my_ismbchar(default_charset_info, s,end))) +      { +        while (l--) +          if (*s++ != *t++) return 1; +      } +      else if (my_ismbhead(default_charset_info, *t)) return 1; +      else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1;      } -    else if (ismbhead(*t)) return 1; -    else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1; +    return 0;    } -  return 0; -#else -  while (len-- != 0 && toupper(*s++) == toupper(*t++)) ; -  return (int) len+1; +  else  #endif +  { +    while (len-- != 0 && toupper(*s++) == toupper(*t++)) ; +    return (int) len+1; +  }  }  int my_strsortcmp(const char *s, const char *t)  {  #ifdef USE_STRCOLL -  return my_strcoll((uchar *)s, (uchar *)t); -#else -  while (my_sort_order[(uchar) *s] == my_sort_order[(uchar) *t++]) -    if (!*s++) return 0; -  return ((int) my_sort_order[(uchar) s[0]] - (int) my_sort_order[(uchar) t[-1]]); +  if (use_strcoll(default_charset_info)) +    return my_strcoll(default_charset_info, (uchar *)s, (uchar *)t); +  else  #endif +  { +    while (my_sort_order[(uchar) *s] == my_sort_order[(uchar) *t++]) +      if (!*s++) return 0; +    return ((int) my_sort_order[(uchar) s[0]] - +            (int) my_sort_order[(uchar) t[-1]]); +  }  }  int my_sortcmp(const char *s, const char *t, uint len)  { -#ifndef USE_STRCOLL -  while (len--) +#ifdef USE_STRCOLL +  if (use_strcoll(default_charset_info)) +    return my_strnncoll(default_charset_info, +                        (uchar *)s, len, (uchar *)t, len); +  else +#endif    { -    if (my_sort_order[(uchar) *s++] != my_sort_order[(uchar) *t++]) -      return ((int) my_sort_order[(uchar) s[-1]] - -	      (int) my_sort_order[(uchar) t[-1]]); +    while (len--) +    { +      if (my_sort_order[(uchar) *s++] != my_sort_order[(uchar) *t++]) +        return ((int) my_sort_order[(uchar) s[-1]] - +                (int) my_sort_order[(uchar) t[-1]]); +    } +    return 0;    } -  return 0; -#else -  return my_strnncoll((uchar *)s, len, (uchar *)t, len); +} + +int my_sortncmp(const char *s, uint s_len, const char *t, uint t_len) +{ +#ifdef USE_STRCOLL +  if (use_strcoll(default_charset_info)) +    return my_strnncoll(default_charset_info, +                        (uchar *)s, s_len, (uchar *)t, t_len); +  else  #endif +  { +    uint len= min(s_len,t_len); +    while (len--) +    { +      if (my_sort_order[(uchar) *s++] != my_sort_order[(uchar) *t++]) +        return ((int) my_sort_order[(uchar) s[-1]] - +                (int) my_sort_order[(uchar) t[-1]]); +    } +    return (int) (s_len - t_len); +  }  }  | 
