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