The R Project SVN R

Rev

Rev 90283 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 90283 Rev 90288
Line 1731... Line 1731...
1731
    }
1731
    }
1732
    return ans;
1732
    return ans;
1733
}
1733
}
1734
 
1734
 
1735
 
1735
 
1736
/* MBCS-aware versions of common comparisons.  Only used for ASCII c */
1736
/* MBCS-aware versions of common comparisons.  Only used for ASCII c,
-
 
1737
   so not needed in UTF-8 locales, but likely in DBCS locales and for
-
 
1738
   7-bit encodings such as ISO-2022-JP.
-
 
1739
 */
1737
char *Rf_strchr(const char *s, int c)
1740
char *Rf_strchr(char *s, int c)
1738
{
1741
{
1739
    char *p = (char *)s;
-
 
1740
    mbstate_t mb_st;
1742
    mbstate_t mb_st;
1741
    size_t used;
1743
    size_t used;
1742
 
1744
 
1743
    if(!mbcslocale || utf8locale) return (char *)strchr(s, c);
1745
    if(!mbcslocale || utf8locale) return strchr(s, c);
1744
    mbs_init(&mb_st);
1746
    mbs_init(&mb_st);
1745
    while( (used = Mbrtowc(NULL, p, R_MB_CUR_MAX, &mb_st)) ) {
1747
    while( (used = Mbrtowc(NULL, s, R_MB_CUR_MAX, &mb_st)) ) {
1746
	if(*p == c) return p;
1748
	if(*s == c) return s;
1747
	p += used;
1749
	s += used;
1748
    }
1750
    }
1749
    return (char *)NULL;
1751
    return (char *)NULL;
1750
}
1752
}
1751
 
1753
 
-
 
1754
// not hidden on Windows
1752
attribute_hidden char *Rf_strrchr(const char *s, int c)
1755
attribute_hidden char *Rf_strrchr(char *s, int c)
1753
{
1756
{
1754
    char *p = (char *)s, *plast = NULL;
1757
    char *plast = NULL;
1755
    mbstate_t mb_st;
1758
    mbstate_t mb_st;
1756
    size_t used;
1759
    size_t used;
1757
 
1760
 
1758
    if(!mbcslocale || utf8locale) return (char *)strrchr(s, c);
1761
    if(!mbcslocale || utf8locale) return strrchr(s, c);
1759
    mbs_init(&mb_st);
1762
    mbs_init(&mb_st);
1760
    while( (used = Mbrtowc(NULL, p, R_MB_CUR_MAX, &mb_st)) ) {
1763
    while( (used = Mbrtowc(NULL, s, R_MB_CUR_MAX, &mb_st)) ) {
-
 
1764
	if(*s == c) plast = s;
-
 
1765
	s += used;
-
 
1766
    }
-
 
1767
    return plast;
-
 
1768
}
-
 
1769
 
-
 
1770
const char *Rf_strchr_const(const char *s, int c)
-
 
1771
{
-
 
1772
    mbstate_t mb_st;
-
 
1773
    size_t used;
-
 
1774
 
-
 
1775
    if(!mbcslocale || utf8locale) return strchr(s, c);
-
 
1776
    mbs_init(&mb_st);
-
 
1777
    while( (used = Mbrtowc(NULL, s, R_MB_CUR_MAX, &mb_st)) ) {
-
 
1778
	if(*s == c) return s;
-
 
1779
	s += used;
-
 
1780
    }
-
 
1781
    return (const char *)NULL;
-
 
1782
}
-
 
1783
 
-
 
1784
// not hidden on Windows
-
 
1785
attribute_hidden const char *Rf_strrchr_const(const char *s, int c)
-
 
1786
{
-
 
1787
    const char *plast = NULL;
-
 
1788
    mbstate_t mb_st;
-
 
1789
    size_t used;
-
 
1790
 
-
 
1791
    if(!mbcslocale || utf8locale) return strrchr(s, c);
-
 
1792
    mbs_init(&mb_st);
-
 
1793
    while( (used = Mbrtowc(NULL, s, R_MB_CUR_MAX, &mb_st)) ) {
1761
	if(*p == c) plast = p;
1794
	if(*s == c) plast = s;
1762
	p += used;
1795
	s += used;
1763
    }
1796
    }
1764
    return plast;
1797
    return plast;
1765
}
1798
}
1766
 
1799
 
1767
#ifdef Win32
1800
#ifdef Win32