11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved.
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *  * Redistributions of source code must retain the above copyright
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    the documentation and/or other materials provided with the
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    distribution.
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <wchar.h>
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <ctype.h>
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <string.h>
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdlib.h>
323527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner#include <errno.h>
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* stubs for wide-char functions */
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  btowc(int c)
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project  return (c == EOF) ? WEOF : c;
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint fwprintf(FILE *stream, const wchar_t *format, ...)
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_list  args;
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    int      result;
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_start(args, format);
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    result = vfwprintf(stream, format, args);
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_end(args);
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return result;
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint wprintf(const wchar_t *format, ...)
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_list  args;
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    int      result;
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_start(args, format);
571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    result = vwprintf(format, args);
581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_end(args);
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return result;
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint swprintf(wchar_t *s, size_t n, const wchar_t *format, ...)
631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_list  args;
651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    int      result;
661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_start(args, format);
681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    result = vswprintf(s, n, format, args);
691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_end(args);
701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return result;
711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint vwprintf(const wchar_t *format, va_list arg)
741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
753527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    return vfwprintf(stdout, format, arg);
761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint vfwprintf(FILE *stream, const wchar_t *format, va_list arg)
791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
803527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    errno = ENOTSUP;
813527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    return -1;
821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint vswprintf(wchar_t *s, size_t n, const wchar_t *format, va_list arg)
851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
863527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    errno = ENOTSUP;
873527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    return -1;
881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint fwscanf(FILE *stream, const wchar_t *format, ... )
911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
923527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    errno = ENOTSUP;
933527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    return -1;
941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint wscanf(const wchar_t *format, ... )
971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_list  args;
991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    int      result;
1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_start (args, format);
1023527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    result = fwscanf(stdout, format, args );
1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    va_end (args);
1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return result;
1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint swscanf(const wchar_t *s, const wchar_t *format, ... )
1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1093527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    errno = ENOTSUP;
1103527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    return -1;
1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswalnum(wint_t wc) { return isalnum(wc); }
1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswalpha(wint_t wc) { return isalpha(wc); }
1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswcntrl(wint_t wc) { return iscntrl(wc); }
1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswdigit(wint_t wc) { return isdigit(wc); }
1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswgraph(wint_t wc) { return isgraph(wc); }
1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswlower(wint_t wc) { return islower(wc); }
1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswprint(wint_t wc) { return isprint(wc); }
1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswpunct(wint_t wc) { return ispunct(wc); }
1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswspace(wint_t wc) { return isspace(wc); }
1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswupper(wint_t wc) { return isupper(wc); }
1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswxdigit(wint_t wc) { return isxdigit(wc); }
1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint iswctype(wint_t wc, wctype_t charclass)
1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    switch (charclass) {
1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_ALNUM: return isalnum(wc);
1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_ALPHA: return isalpha(wc);
1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_BLANK: return isblank(wc);
1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_CNTRL: return iscntrl(wc);
1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_DIGIT: return isdigit(wc);
1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_GRAPH: return isgraph(wc);
1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_LOWER: return islower(wc);
1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_PRINT: return isprint(wc);
1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_PUNCT: return ispunct(wc);
1371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_SPACE: return isspace(wc);
1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_UPPER: return isupper(wc);
1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        case WC_TYPE_XDIGIT: return isxdigit(wc);
1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        default: return 0;
1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    };
1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t fgetwc(FILE *stream)
1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1463527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner    return (wint_t)fgetc(stream);
1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwchar_t *fgetws(wchar_t *ws, int n, FILE *stream)
1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (wchar_t*) fgets((char*)ws, n, stream);
1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t   fputwc(wchar_t wc, FILE *stream)
1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (wint_t)fputc((char)wc, stream);
1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint  fputws(const wchar_t *str, FILE *stream)
1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return fputs( (const char*)str, stream );
1621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint  fwide(FILE *stream, int  mode)
1651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    stream=stream;
1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (mode);
1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  getwc(FILE *stream)
1711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return getc(stream);
1731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  getwchar(void)
1761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return getchar();
1781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint mbsinit(const mbstate_t *ps)
1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    ps=ps;
1831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return 1;
1841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t mbrlen(const char *s, size_t n, mbstate_t *ps)
1871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (n != 0);
1891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
1901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
1921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
1931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (s == NULL) {
1941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        s   = "";
1951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        pwc = NULL;
1961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    }
1971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (n == 0) {
1981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        if (pwc)
1991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project            *pwc = 0;
2001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        return 0;
2011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    }
2021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (pwc)
2031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        *pwc = *s;
2041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (*s != 0);
2061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t mbsrtowcs(wchar_t *dst, const char **src, size_t len, mbstate_t *ps)
2091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    const char*  s  = *src;
2111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    const char*  s2 = memchr( s, 0, len );
2121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (s2 != NULL)
2141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        len = (size_t)(s2 - s) + 1U;
2151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (dst)
2171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        memcpy( (char*)dst, s, len );
2181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    *src = s + len;
2201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return len;
2211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
22303c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornsteinsize_t mbstowcs(wchar_t *dst, const char *src, size_t len)
22403c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein{
22503c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein    return mbsrtowcs(dst, &src, len, NULL);
22603c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein}
22703c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein
2281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  putwc(wchar_t wc, FILE *stream)
2291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return fputc((char)wc, stream);
2311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  putwchar(wchar_t wc)
2341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return  putchar((char)wc);
2361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  towlower(wint_t wc)
2391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return tolower(wc);
2411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  towupper(wint_t  wc)
2441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return toupper(wc);
2461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwint_t  ungetwc(wint_t wc, FILE *stream)
2491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return ungetc((char)wc, stream);
2511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps)
2541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (s != NULL)
2561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        *s = 1;
2571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return 1;
2581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t wcsftime(wchar_t *wcs, size_t maxsize, const wchar_t *format,  const struct tm *timptr)
2611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return strftime( (char*)wcs, maxsize, (const char*)format, timptr );
2631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t wcsrtombs(char *dst, const wchar_t **src, size_t len, mbstate_t *ps)
2661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    const char*  s = (const char*)*src;
2681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    const char*  s2 = memchr( s, 0, len );
2691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (s2 != NULL)
2711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        len = (s2 - s)+1;
2721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    if (dst != NULL)
2741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        memcpy( dst, s, len );
2751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    *src = (wchar_t*)(s + len);
2771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return len;
2781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
28003c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornsteinsize_t wcstombs(char *dst, const wchar_t *src, size_t len)
28103c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein{
28203c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein    return wcsrtombs(dst, &src, len, NULL);
28303c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein}
28403c643b493d0d6e4385fe5a33d33d2cb945493d2Dan Bornstein
2851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectdouble wcstod(const wchar_t *nptr, wchar_t **endptr)
2861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return strtod( (const char*)nptr, (char**)endptr );
2881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectlong int wcstol(const wchar_t *nptr, wchar_t **endptr, int base)
2911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return strtol( (const char*)nptr, (char**)endptr, base );
2931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectunsigned long int wcstoul(const wchar_t *nptr, wchar_t **endptr, int base)
2961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
2971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return strtoul( (const char*)nptr, (char**)endptr, base );
2981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
2991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwchar_t *wcswcs(const wchar_t *ws1, const wchar_t *ws2)
3011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
3021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (wchar_t*) strstr( (const char*)ws1, (const char*)ws2 );
3031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
3041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint wctob(wint_t c)
3061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
307e734769276045c0cb89d4620fdd4ef35a0e6c335André Goddard Rosa    return c;
3081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
3091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwctype_t wctype(const char *property)
3111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
3121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    static const char* const  properties[WC_TYPE_MAX] =
3131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    {
3141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        "<invalid>",
3151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        "alnum", "alpha", "blank", "cntrl", "digit", "graph",
3161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        "lower", "print", "punct", "space", "upper", "xdigit"
3171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    };
3181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    int  nn;
3191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    for ( nn = 0; nn < WC_TYPE_MAX; nn++ )
3211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project        if ( !strcmp( properties[nn], property ) )
3221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project            return (wctype_t)(nn);
3231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return 0;
3251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
3261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint wcwidth(wchar_t wc)
3281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
3291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    return (wc > 0);
3301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
331