16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 1997-2011, International Business Machines
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File FILESTRM.C
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @author       Glenn Marcy
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History:
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Date        Name        Description
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   5/8/98      gm          Created
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*  03/02/99     stephen     Reordered params in ungetc to match stdio
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           Added wopen
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   3/29/99     helena      Merged Stephen and Bertrand's changes.
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "filestrm.h"
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h"
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h>
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FileStream* U_EXPORT2
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_open(const char* filename, const char* mode)
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(filename != NULL && *filename != 0 && mode != NULL && *mode != 0) {
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        FILE *file = fopen(filename, mode);
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return (FileStream*)file;
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return NULL;
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FileStream* U_EXPORT2
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_wopen(const wchar_t* filename, const wchar_t* mode)
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   // TBD: _wfopen is believed to be MS-specific?
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM_USES_ONLY_WIN32_API
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FILE* result = _wfopen(filename, mode);
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (FileStream*)result;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    size_t fnMbsSize, mdMbsSize;
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char *fn, *md;
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FILE *result;
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // convert from wchar_t to char
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fnMbsSize = wcstombs(NULL, filename, ((size_t)-1) >> 1);
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fn = (char*)uprv_malloc(fnMbsSize+2);
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    wcstombs(fn, filename, fnMbsSize);
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fn[fnMbsSize] = 0;
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    mdMbsSize = wcstombs(NULL, mode, ((size_t)-1) >> 1);
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    md = (char*)uprv_malloc(mdMbsSize+2);
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    wcstombs(md, mode, mdMbsSize);
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    md[mdMbsSize] = 0;
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    result = fopen(fn, md);
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_free(fn);
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_free(md);
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (FileStream*)result;
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_close(FileStream* fileStream)
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fileStream != 0)
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fclose((FILE*)fileStream);
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_file_exists(const char* filename)
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FILE* temp = fopen(filename, "r");
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (temp) {
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fclose(temp);
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return TRUE;
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return FALSE;
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*static const int32_t kEOF;
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst int32_t FileStream::kEOF = EOF;*/
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FileStream*
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_tmpfile()
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FILE* file = tmpfile();
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (FileStream*)file;
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_read(FileStream* fileStream, void* addr, int32_t len)
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fread(addr, 1, len, (FILE*)fileStream);
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_write(FileStream* fileStream, const void* addr, int32_t len)
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fwrite(addr, 1, len, (FILE*)fileStream);
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_rewind(FileStream* fileStream)
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    rewind((FILE*)fileStream);
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_putc(FileStream* fileStream, int32_t ch)
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t c = fputc(ch, (FILE*)fileStream);
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return c;
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int U_EXPORT2
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_getc(FileStream* fileStream)
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int c = fgetc((FILE*)fileStream);
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return c;
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_ungetc(int32_t ch, FileStream* fileStream)
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t c = ungetc(ch, (FILE*)fileStream);
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return c;
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_peek(FileStream* fileStream)
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t c = fgetc((FILE*)fileStream);
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return ungetc(c, (FILE*)fileStream);
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI char* U_EXPORT2
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_readLine(FileStream* fileStream, char* buffer, int32_t length)
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fgets(buffer, length, (FILE*)fileStream);
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_writeLine(FileStream* fileStream, const char* buffer)
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fputs(buffer, (FILE*)fileStream);
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_size(FileStream* fileStream)
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t savedPos = ftell((FILE*)fileStream);
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t size = 0;
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*Changes by Bertrand A. D. doesn't affect the current position
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    goes to the end of the file before ftell*/
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fseek((FILE*)fileStream, 0, SEEK_END);
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    size = (int32_t)ftell((FILE*)fileStream);
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fseek((FILE*)fileStream, savedPos, SEEK_SET);
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return size;
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int U_EXPORT2
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_eof(FileStream* fileStream)
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return feof((FILE*)fileStream);
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Warning
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org This function may not work consistently on all platforms
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (e.g. HP-UX, FreeBSD and MacOSX don't return an error when
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org putc is used on a file opened as readonly)
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int U_EXPORT2
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_error(FileStream* fileStream)
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (fileStream == 0 || ferror((FILE*)fileStream));
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* This function doesn't work. */
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* force the stream to set its error flag*/
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*U_CAPI void U_EXPORT2
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_setError(FileStream* fileStream)
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fseek((FILE*)fileStream, 99999, SEEK_SET);
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FileStream* U_EXPORT2
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_stdin(void)
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (FileStream*)stdin;
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FileStream* U_EXPORT2
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_stdout(void)
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (FileStream*)stdout;
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FileStream* U_EXPORT2
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_stderr(void)
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (FileStream*)stderr;
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgT_FileStream_remove(const char* fileName){
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (remove(fileName) == 0);
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
226