char *last=NULL;
if (nbytes == (size_t)-1) {
+ size_t nb = 0;
+
while (*p != '\0') {
- if ((unsigned int)*p == c) {
- last = (char *)p;
+ if (nb == 0) {
+ if ((unsigned char)*p == (unsigned char)c) {
+ last = (char *)p;
+ }
+ nb = php_mb_mbchar_bytes_ex(p, enc);
+ if (nb == 0) {
+ return NULL; /* something is going wrong! */
+ }
}
- p += php_mb_mbchar_bytes_ex(p, enc);
+ --nb;
+ ++p;
}
} else {
register size_t bcnt = nbytes;
register size_t nbytes_char;
while (bcnt > 0) {
- if ((unsigned int)*p == c) {
+ if ((unsigned char)*p == (unsigned char)c) {
last = (char *)p;
}
nbytes_char = php_mb_mbchar_bytes_ex(p, enc);