summaryrefslogtreecommitdiff
path: root/ext/mysql/libmysql/mf_casecnv.c
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2000-02-19 10:10:46 +0000
committerAndi Gutmans <andi@php.net>2000-02-19 10:10:46 +0000
commit0cda28f77bcea25a35b2d55ee1bb52c5fdb34f2a (patch)
tree11e6fbfcc15fe72ed98e6736d84b47ac9250fcc0 /ext/mysql/libmysql/mf_casecnv.c
parentfe9abd3219b097e0c0f2c9106751d35b2bede2d6 (diff)
downloadphp-git-0cda28f77bcea25a35b2d55ee1bb52c5fdb34f2a.tar.gz
- Add libmysql to the tree
Diffstat (limited to 'ext/mysql/libmysql/mf_casecnv.c')
-rw-r--r--ext/mysql/libmysql/mf_casecnv.c195
1 files changed, 195 insertions, 0 deletions
diff --git a/ext/mysql/libmysql/mf_casecnv.c b/ext/mysql/libmysql/mf_casecnv.c
new file mode 100644
index 0000000000..6b24182b9c
--- /dev/null
+++ b/ext/mysql/libmysql/mf_casecnv.c
@@ -0,0 +1,195 @@
+/* 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.
+
+ 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 <m_ctype.h>
+
+ /* string to uppercase */
+
+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++;
+#endif
+} /* caseup_str */
+
+ /* string to lowercase */
+
+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++;
+#endif
+} /* casedn_str */
+
+
+ /* to uppercase */
+
+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);
+#endif
+} /* caseup */
+
+ /* to lowercase */
+
+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);
+#endif
+} /* 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 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
+ register uint32 l;
+ register const char *end=s+strlen(s);
+ while (s<end)
+ {
+ if ((l=ismbchar(s,end)))
+ {
+ while (l--)
+ if (*s++ != *t++) return 1;
+ }
+ else if (ismbhead(*t)) return 1;
+ else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1;
+ }
+ 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]));
+#endif
+}
+
+
+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 ((l=ismbchar(s,end)))
+ {
+ while (l--)
+ if (*s++ != *t++) return 1;
+ }
+ else if (ismbhead(*t)) return 1;
+ else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1;
+ }
+ return 0;
+#else
+ while (len-- != 0 && toupper(*s++) == toupper(*t++)) ;
+ return (int) len+1;
+#endif
+}
+
+
+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]]);
+#endif
+}
+
+int my_sortcmp(const char *s, const char *t, uint len)
+{
+#ifndef USE_STRCOLL
+ 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;
+#else
+ return my_strnncoll((uchar *)s, len, (uchar *)t, len);
+#endif
+}