//fprintf(stderr, "skipping\n");
++i;
}
- if(i >= _maxlen)
- return false;
- //fprintf(stderr, "checking\n");
+ //fprintf(stderr, "checking\n");
// If we hit the end, well, we're out and invalid
- if (!s[i])
+ if(i >= _maxlen || !s[i]) {
+ if (_start) *_start = i;
+ if (_len) *_len = 0;
return false;
- //fprintf(stderr, "checking ascii\n");
+ }
+ //fprintf(stderr, "checking ascii\n");
// ascii characters
if (s[i] < 0x80)
{
++i;
goto findchar;
}
- if(i + bits > _maxlen)
+ if(i + bits > _maxlen) {
+ if (_start) *_start = i;
+ if (_len) *_len = 0;
return false;
+ }
// turn bt into a mask and give ch a starting value
--bt;
ch = (s[i] & bt);
}
if (!u8_analyze(_s, &st, &ln, &ch, U8_ANALYZE_INFINITY))
- return 0;
+ ch = 0;
if (_end)
*_end = _s + st + ln;
return ch;
}
if (!u8_analyze(_s, &st, &ln, &ch, _maxlen))
- return 0;
+ ch = 0;
if (_end)
*_end = _s + st + ln;
return ch;
int u8_fromchar(Uchar w, char *to, size_t maxlen)
{
if (maxlen < 1)
- return -2;
+ return 0;
if (!w)
- return -5;
+ return 0;
if (w >= 0xE000 && !utf8_enable.integer)
w -= 0xE000;
to[0] = 0xE0 | w;
return 4;
}
- return -1;
+ return 0;
}
/** uses u8_fromchar on a static buffer
return 0;
for (i = 0; wcs[i] && i < maxlen-1; ++i)
{
+ /*
int len;
if ( (len = u8_fromchar(wcs[i], mb, maxlen - i)) < 0)
return (mb - start);
mb += len;
+ */
+ mb += u8_fromchar(wcs[i], mb, maxlen - i);
}
*mb = 0;
return (mb - start);