summaryrefslogtreecommitdiff
path: root/ext/mysql/libmysql/mf_casecnv.c
diff options
context:
space:
mode:
authorMySQL Team <mysql@php.net>2000-10-20 22:26:48 +0000
committerMySQL Team <mysql@php.net>2000-10-20 22:26:48 +0000
commita2dbb10eb14801370522ec248e1d819eb38a83a2 (patch)
treec3888dc986fa7baa6937b38d485af20d8ee81d9d /ext/mysql/libmysql/mf_casecnv.c
parentebaf484830ab5c7a0e14a9b43a174916330cd031 (diff)
downloadphp-git-a2dbb10eb14801370522ec248e1d819eb38a83a2.tar.gz
Update libmysql to 3.23 version. No major changes visible to the user - mostly
bug fixes and other maintenance-oriented changes.
Diffstat (limited to 'ext/mysql/libmysql/mf_casecnv.c')
-rw-r--r--ext/mysql/libmysql/mf_casecnv.c189
1 files changed, 116 insertions, 73 deletions
diff --git a/ext/mysql/libmysql/mf_casecnv.c b/ext/mysql/libmysql/mf_casecnv.c
index 6b24182b9c..3b8e6c6a75 100644
--- a/ext/mysql/libmysql/mf_casecnv.c
+++ b/ext/mysql/libmysql/mf_casecnv.c
@@ -1,5 +1,5 @@
-/* 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 Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
+This file is public domain and comes with NO WARRANTY of any kind */
/*
Functions to convert to lover_case and to upper_case in scandinavia.
@@ -18,16 +18,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 +37,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 +58,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 +77,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 +104,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 +112,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 +130,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 +160,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);
+ }
}