14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  PFileWrap.c  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h>
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdarg.h>
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h"
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pendian.h"
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFile.h"
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h"
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h"
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptypes.h"
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileClose( PFile *self )
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    fclose ( (FILE *)self );
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( ESR_SUCCESS );
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileRead ( PFile *self, void *buffer, size_t size, size_t *count )
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  read_status;
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t          items_read;
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             ferror_status;
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    items_read = fread ( buffer, size, *count, (FILE *)self );
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( items_read > 0 )
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        read_status = ESR_SUCCESS;
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *count = items_read;
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        ferror_status = ferror ( (FILE *)self );
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if ( ferror_status == 0 )
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            {
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            read_status = ESR_SUCCESS;
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            *count = items_read;
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            }
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        else
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            {
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            read_status = ESR_READ_ERROR;
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            }
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( read_status );
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileWrite ( PFile *self, const void *buffer, size_t size, size_t *count )
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  write_status;
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t          items_written;
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    items_written = fwrite ( buffer, size, *count, (FILE *)self );
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( items_written == ( *count ) )
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        write_status = ESR_SUCCESS;
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *count = items_written;
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        write_status = ESR_READ_ERROR;
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( write_status );
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileFlush ( PFile *self )
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  flush_status;
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t          flush_ok;
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    flush_ok = fflush ( (FILE *)self );
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( flush_ok == 0 )
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        flush_status = ESR_SUCCESS;
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        flush_status = ESR_FLUSH_ERROR;
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( flush_status );
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileSeek ( PFile *self, long offset, int origin )
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  seek_status;
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t          seek_ok;
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    seek_ok = fseek ( (FILE *)self, offset, origin );
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( seek_ok == 0 )
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        seek_status = ESR_SUCCESS;
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        seek_status = ESR_SEEK_ERROR;
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( seek_status );
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileGetPosition ( PFile *self, size_t *position )
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  get_status;
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    long            ftell_result;
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ftell_result = ftell ( (FILE *)self );
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( ftell_result >= 0 )
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	*position = (size_t)ftell_result;
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        get_status = ESR_SUCCESS;
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        get_status = ESR_INVALID_STATE;
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( get_status );
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileIsEOF ( PFile *self, ESR_BOOL *isEof )
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef NO_FEOF
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    long            posCur;    /* remember current file position */
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    long            posEnd;    /* end of file position */
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    posCur = ftell ( self );
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    fseek ( self, 0, SEEK_END );
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    posEnd = ftell ( self );
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( posCur == posEnd )
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *isEof = ESR_TRUE;
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *isEof = ESR_FALSE;
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    fseek ( self, posCur, SEEK_SET );  /* restore position in file */
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             is_eof;
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    is_eof = feof ( (FILE *)self );
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( is_eof != 0 )
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *isEof = ESR_TRUE;
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *isEof = ESR_FALSE;
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( ESR_SUCCESS );
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileIsErrorSet ( PFile *self, ESR_BOOL *isError )
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int is_error;
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    is_error = ferror ( (FILE *)self );
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( is_error != 0 )
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *isError = ESR_TRUE;
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *isError = ESR_FALSE;
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( ESR_SUCCESS );
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileClearError ( PFile *self )
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    clearerr ( (FILE *)self );
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( ESR_SUCCESS );
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileVfprintf ( PFile *self, int *result, const LCHAR *format, va_list args )
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int bytes_printed;
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    bytes_printed = vfprintf ( (FILE *)self, format, args );
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( result != NULL )
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *result = bytes_printed;
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( ESR_SUCCESS );
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileFgetc ( PFile *self, LINT *result )
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  fgetc_status;
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             error_status;
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    *result = fgetc ( (FILE *)self );
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( ( *result ) != EOF )
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fgetc_status = ESR_SUCCESS;
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        error_status = ferror ( (FILE *)self );
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if ( error_status == 0 )
2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            fgetc_status = ESR_SUCCESS;
2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        else
2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            fgetc_status = ESR_INVALID_STATE;
2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( fgetc_status );
2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PFileFgets ( PFile *self, LCHAR *string, int n, LCHAR **result )
2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  fgets_status;
2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             error_status;
2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR           *temp;
2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    temp = fgets ( string, n, (FILE *)self );
2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( temp != NULL )
2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fgets_status = ESR_SUCCESS;
2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if ( result != NULL )
2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            *result = temp;
2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        error_status = ferror ( (FILE *)self );
2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if ( error_status == 0 )
2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            {
2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            fgets_status = ESR_SUCCESS;
2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            if ( result != NULL )
2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                *result = NULL;
2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            }
2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        else
2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            fgets_status = ESR_INVALID_STATE;
2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( fgets_status );
2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPFile *pfopen ( const LCHAR *filename, const LCHAR *mode )
2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PFile           *result;
2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    result = (PFile *)fopen ( filename, mode );
2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( result );
2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsize_t pfread ( void *buffer, size_t size, size_t count, PFile *stream )
2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode rc;
2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileRead ( stream, buffer, size, &count );
2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( 0 );
2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( count );
3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsize_t pfwrite ( const void *buffer, size_t size, size_t count, PFile *stream )
3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode rc;
3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileWrite ( stream, buffer, size, &count );
3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( 0 );
3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( count );
3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pfclose ( PFile *stream )
3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    fclose ( (FILE *)stream );
3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( 0 );
3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid prewind (PFile *stream)
3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PFileSeek ( stream, 0, SEEK_SET );
3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pfseek ( PFile *stream, long offset, int origin )
3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode rc;
3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileSeek ( stream, offset, origin );
3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( 1 );
3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( 0 );
3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectlong pftell ( PFile *stream )
3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  rc;
3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t          result;
3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileGetPosition ( stream, &result );
3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( -1 );
3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( result );
3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pfeof ( PFile *stream )
3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL eof;
3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PFileIsEOF ( stream, &eof );
3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( ! eof )
3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( 0 );
3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( 1 );
3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pferror ( PFile *stream )
3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL error;
3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PFileIsErrorSet ( stream, &error );
3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( ! error )
3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( 0 );
3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( 1 );
3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid pclearerr ( PFile *stream )
3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PFileClearError ( stream );
3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pfflush ( PFile *stream )
3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode rc;
3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileFlush ( stream );
4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( PEOF );
4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( 0 );
4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectLCHAR* pfgets ( LCHAR *string, int n, PFile *self )
4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR           *result;
4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  rc;
4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileFgets ( self, string, n, &result );
4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( NULL );
4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( result );
4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectLINT pfgetc ( PFile *self )
4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  rc;
4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LINT            result;
4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileFgetc ( self, &result );
4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( PEOF );
4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( result );
4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pfprintf ( PFile *stream, const LCHAR *format, ... )
4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  rc;
4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             result;
4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    va_list         args;
4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    va_start ( args, format );
4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileVfprintf ( stream, &result, format, args );
4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    va_end ( args );
4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( -1 );
4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( result );
4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint pvfprintf ( PFile *stream, const LCHAR *format, va_list argptr )
4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  rc;
4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             result;
4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = PFileVfprintf ( stream, &result, format, argptr );
4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( rc != ESR_SUCCESS )
4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ( -1 );
4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( result );
4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode pf_convert_backslashes_to_forwardslashes ( LCHAR *string_to_convert )
4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode  rc;
4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int             string_status;
4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( string_to_convert != NULL )
4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	string_status = lstrreplace ( string_to_convert, L('\\'), L('/') );
4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if ( string_status == 0 )
4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    rc = ESR_SUCCESS;
4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	else
4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    rc = ESR_INVALID_ARGUMENT;
4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
4814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	{
4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	rc = ESR_INVALID_ARGUMENT;
4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( rc );
4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode pf_is_path_absolute ( const LCHAR* input_path, ESR_BOOL* isAbsolute )
4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode rc;
4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR path [P_PATH_MAX];
4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( isAbsolute != NULL )
4954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	LSTRCPY ( path, input_path );
4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	rc = pf_convert_backslashes_to_forwardslashes ( path );
4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if ( rc == ESR_SUCCESS )
5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    {
5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    if ( ( path [0] == '/' ) || ( ( LISALPHA ( path [0] ) ) && ( path [1] == ':' ) && ( path [2] == '/' ) ) )
5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		*isAbsolute = ESR_TRUE;
5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    else
5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		*isAbsolute = ESR_FALSE;
5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
5064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	{
5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	rc = ESR_INVALID_ARGUMENT;
5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ( rc );
5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
514