while (*s) {
if ((0xD800 <= *s) && (*s < 0xDC00)) {
if ((0xDC00 <= s[1]) && (s[1] < 0xE000)) {
- u_int32_t s_sp = (u_int32_t)*s << 16 | (u_int32_t)s[1];
- u_int32_t v_sp = tolower_sp(s_sp);
+ uint32_t s_sp = (uint32_t)*s << 16 | (uint32_t)s[1];
+ uint32_t v_sp = tolower_sp(s_sp);
if (v_sp != s_sp) {
*s = v_sp >> 16;
s++;
while (*s) {
if ((0xD800 <= *s) && (*s < 0xDC00)) {
if ((0xDC00 <= s[1]) && (s[1] < 0xE000)) {
- u_int32_t s_sp = (u_int32_t)*s << 16 | (u_int32_t)s[1];
- u_int32_t v_sp = toupper_sp(s_sp);
+ uint32_t s_sp = (uint32_t)*s << 16 | (uint32_t)s[1];
+ uint32_t v_sp = toupper_sp(s_sp);
if (v_sp != s_sp) {
*s = v_sp >> 16;
s++;
return ( c == tolower_w(c));
}
-int islower_sp(u_int32_t c_sp)
+int islower_sp(uint32_t c_sp)
{
return ( c_sp == tolower_sp(c_sp));
}
return ( c == toupper_w(c));
}
-int isupper_sp(u_int32_t c_sp)
+int isupper_sp(uint32_t c_sp)
{
return ( c_sp == toupper_sp(c_sp));
}
ucs2_t *strcasechr_w(const ucs2_t *s, ucs2_t c)
{
while (*s != 0) {
-/* LOG(log_debug, logtype_default, "Comparing %X to %X (%X - %X)", c, *s, toupper_w(c), toupper_w(*s));*/
- if (toupper_w(c) == toupper_w(*s)) return (ucs2_t *)s;
+ if (tolower_w(c) == tolower_w(*s)) return (ucs2_t *)s;
s++;
}
if (c == *s) return (ucs2_t *)s;
return NULL;
}
-ucs2_t *strcasechr_sp(const ucs2_t *s, u_int32_t c_sp)
+ucs2_t *strcasechr_sp(const ucs2_t *s, uint32_t c_sp)
{
if (*s == 0) return NULL;
while (s[1] != 0) {
- if (toupper_sp(c_sp) == toupper_sp((u_int32_t)*s << 16 | (u_int32_t)s[1])) return (ucs2_t *)s;
+ if (tolower_sp(c_sp) == tolower_sp((uint32_t)*s << 16 | (uint32_t)s[1])) return (ucs2_t *)s;
s++;
}
/*******************************************************************
wide strcasestr()
********************************************************************/
-/* */
+/* surrogate pair support */
ucs2_t *strcasestr_w(const ucs2_t *s, const ucs2_t *ins)
{
slen = strlen_w(s);
inslen = strlen_w(ins);
r = (ucs2_t *)s;
- while ((r = strcasechr_w(r, *ins))) {
- if (strncasecmp_w(r, ins, inslen) == 0) return r;
- r++;
+
+ if ((0xD800 <= *ins) && (*ins < 0xDC00)) {
+ if ((0xDC00 <= ins[1]) && (ins[1] < 0xE000)) {
+ uint32_t ins_sp = (uint32_t)*ins << 16 | (uint32_t)ins[1];
+ while ((r = strcasechr_sp(r, ins_sp))) {
+ if (strncasecmp_w(r, ins, inslen) == 0) return r;
+ r++;
+ }
+ } else {
+ return NULL; /* illegal sequence */
+ }
+ } else {
+ while ((r = strcasechr_w(r, *ins))) {
+ if (strncasecmp_w(r, ins, inslen) == 0) return r;
+ r++;
+ }
}
return NULL;
}
while (*a && *b) {
if ((0xD800 <= *a) && (*a < 0xDC00)) {
- if (ret = tolower_sp((u_int32_t)*a << 16 | (u_int32_t)a[1]) - tolower_sp((u_int32_t)*b << 16 | (u_int32_t)b[1])) return ret;
+ if ((ret = tolower_sp((uint32_t)*a << 16 | (uint32_t)a[1]) - tolower_sp((uint32_t)*b << 16 | (uint32_t)b[1]))) return ret;
a++;
b++;
if (!(*a && *b)) return (tolower_w(*a) - tolower_w(*b)); /* avoid buffer over run */
} else {
- if (ret = tolower_w(*a) - tolower_w(*b)) return ret;
+ if ((ret = tolower_w(*a) - tolower_w(*b))) return ret;
}
a++;
b++;
while ((n < len) && *a && *b) {
if ((0xD800 <= *a) && (*a < 0xDC00)) {
- if (ret = tolower_sp((u_int32_t)*a << 16 | (u_int32_t)a[1]) - tolower_sp((u_int32_t)*b << 16 | (u_int32_t)b[1])) return ret;
+ if ((ret = tolower_sp((uint32_t)*a << 16 | (uint32_t)a[1]) - tolower_sp((uint32_t)*b << 16 | (uint32_t)b[1]))) return ret;
a++;
b++;
n++;
if (!((n < len) && *a && *b)) return (tolower_w(*a) - tolower_w(*b));
} else {
- if (ret = tolower_w(*a) - tolower_w(*b)) return ret;
+ if ((ret = tolower_w(*a) - tolower_w(*b))) return ret;
}
a++;
b++;
/*******************************************************************
copy a string with max len
********************************************************************/
+/* This function is not used. */
+/* NOTE: not check isolation of surrogate pair */
ucs2_t *strncpy_w(ucs2_t *dest, const ucs2_t *src, const size_t max)
{
/*******************************************************************
append a string of len bytes and add a terminator
********************************************************************/
+/* These functions are not used. */
+/* NOTE: not check isolation of surrogate pair */
ucs2_t *strncat_w(ucs2_t *dest, const ucs2_t *src, const size_t max)
{
size_t start;
return dest;
}
-
+/* no problem of surrogate pair */
ucs2_t *strcat_w(ucs2_t *dest, const ucs2_t *src)
{
size_t start;
base_sp = ((uint32_t)base << 16) | (uint32_t)comb;
do {
comb_sp = ((uint32_t)in[1] << 16) | (uint32_t)in[2];
- if (result_sp = do_precomposition_sp(base_sp, comb_sp)) {
+ if ((result_sp = do_precomposition_sp(base_sp, comb_sp))) {
base_sp = result_sp;
i += 4;
in +=2;
}
/* Binary Search for BMP */
- else if (result = do_precomposition(base, comb)) {
+ else if ((result = do_precomposition(base, comb))) {
base = result;
}