diff options
Diffstat (limited to 'src/stdio_streambuf.cpp')
-rw-r--r-- | src/stdio_streambuf.cpp | 239 |
1 files changed, 0 insertions, 239 deletions
diff --git a/src/stdio_streambuf.cpp b/src/stdio_streambuf.cpp deleted file mode 100644 index 45aad79..0000000 --- a/src/stdio_streambuf.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (c) 1999 - * Silicon Graphics Computer Systems, Inc. - * - * Copyright (c) 1999 - * Boris Fomitchev - * - * This material is provided "as is", with absolutely no warranty expressed - * or implied. Any use is at your own risk. - * - * Permission to use or copy this software for any purpose is hereby granted - * without fee, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - * - */ - -#include "stlport_prefix.h" -#include "stdio_streambuf.h" - -#ifdef _STLP_UNIX -# include <sys/types.h> -# include <sys/stat.h> -#endif - -#include <fstream> -#include <limits> - -_STLP_BEGIN_NAMESPACE -_STLP_MOVE_TO_PRIV_NAMESPACE - -// Compare with streamoff definition in stl/char_traits.h! - -#if defined (_STLP_USE_DEFAULT_FILE_OFFSET) || \ - (!defined(_LARGEFILE_SOURCE) && !defined(_LARGEFILE64_SOURCE)) -# if !defined (_STLP_MSVC) || (_STLP_MSVC < 1400) || defined(_STLP_WCE) -# define FSEEK fseek -# else -# define FSEEK _fseeki64 -# endif -# define FSETPOS fsetpos -# define FGETPOS fgetpos -# define FPOS_T fpos_t -#else -# define FSEEK fseeko64 -# define FSETPOS fsetpos64 -# define FGETPOS fgetpos64 -# define FPOS_T fpos64_t -#endif - -//---------------------------------------------------------------------- -// Class stdio_streambuf_base - -stdio_streambuf_base::stdio_streambuf_base(FILE* file) - : /* _STLP_STD::FILE_basic_streambuf(file, 0), */ - _M_file(file) -{} - -stdio_streambuf_base::~stdio_streambuf_base() { - _STLP_VENDOR_CSTD::fflush(_M_file); -} - -_STLP_STD::streambuf* stdio_streambuf_base::setbuf(char* s, streamsize n) { -#ifdef _STLP_WCE - // no buffering in windows ce .NET -#else - size_t __n_size_t = (sizeof(streamsize) > sizeof(size_t)) ? __STATIC_CAST(size_t, (min)(__STATIC_CAST(streamsize, (numeric_limits<size_t>::max)()), n)) - : __STATIC_CAST(size_t, n); - _STLP_VENDOR_CSTD::setvbuf(_M_file, s, (s == 0 && n == 0) ? _IONBF : _IOFBF, __n_size_t); -#endif - return this; -} - -stdio_streambuf_base::pos_type -stdio_streambuf_base::seekoff(off_type off, ios_base::seekdir dir, - ios_base::openmode /* mode */) { - int whence; - switch (dir) { - case ios_base::beg: - whence = SEEK_SET; - break; - case ios_base::cur: - whence = SEEK_CUR; - break; - case ios_base::end: - whence = SEEK_END; - break; - default: - return pos_type(-1); - } - - if (off <= numeric_limits<off_type>::max() && FSEEK(_M_file, off, whence) == 0) { - FPOS_T pos; - FGETPOS(_M_file, &pos); - // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead - // of a primitive type -#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2)))) - return pos_type((streamoff)pos.__pos); -#elif defined (__ISCPP__) || defined (__MVS__) || defined (__OS400__) - return pos_type(pos.__fpos_elem[ 0 ]); -#elif defined (__EMX__) - return pos_type((streamoff)pos._pos); -#else - return pos_type(pos); -#endif - } - else - return pos_type(-1); -} - - -stdio_streambuf_base::pos_type -stdio_streambuf_base::seekpos(pos_type pos, ios_base::openmode /* mode */) { - // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead - // of a primitive type -#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) ) - FPOS_T p; - p.__pos = pos; -# ifdef _STLP_USE_UCLIBC -# ifdef __STDIO_MBSTATE - memset( &(p.__mbstate), 0, sizeof(p.__mbstate) ); -# endif -# ifdef __STDIO_WIDE - p.mblen_pending = 0; -# endif -# else - memset( &(p.__state), 0, sizeof(p.__state) ); -# endif -#elif defined (__MVS__) || defined (__OS400__) - FPOS_T p; - p.__fpos_elem[0] = pos; -#elif defined (__EMX__) - FPOS_T p; - p._pos = pos; - memset( &(p._mbstate), 0, sizeof(p._mbstate) ); -#else - FPOS_T p(pos); -#endif - - return FSETPOS(_M_file, &p) == 0 ? pos : pos_type(-1); -} - -int stdio_streambuf_base::sync() { - return _STLP_VENDOR_CSTD::fflush(_M_file) == 0 ? 0 : -1; -} - -//---------------------------------------------------------------------- -// Class stdio_istreambuf - -stdio_istreambuf::~stdio_istreambuf() {} - -streamsize stdio_istreambuf::showmanyc() -{ return 0; } - -stdio_istreambuf::int_type stdio_istreambuf::underflow() -{ -#ifdef _STLP_WCE - int c = fgetc(_M_file); -#else - int c = getc(_M_file); -#endif - if (c != EOF) { - _STLP_VENDOR_CSTD::ungetc(c, _M_file); - return c; - } - else - return traits_type::eof(); -} - -stdio_istreambuf::int_type stdio_istreambuf::uflow() { -#ifdef _STLP_WCE - int c = fgetc(_M_file); -#else - int c = getc(_M_file); -#endif - return c != EOF ? c : traits_type::eof(); -} - -stdio_istreambuf::int_type stdio_istreambuf::pbackfail(int_type c) { - if (c != traits_type::eof()) { - int result = _STLP_VENDOR_CSTD::ungetc(c, _M_file); - return result != EOF ? result : traits_type::eof(); - } - else{ - if (this->eback() < this->gptr()) { - this->gbump(-1); - return traits_type::not_eof(c); - } - else - return traits_type::eof(); - } -} - -//---------------------------------------------------------------------- -// Class stdio_ostreambuf - -stdio_ostreambuf::~stdio_ostreambuf() {} - -streamsize stdio_ostreambuf::showmanyc() -{ return -1; } - -stdio_ostreambuf::int_type stdio_ostreambuf::overflow(int_type c) { - // Write the existing buffer, without writing any additional character. - if (c == traits_type::eof()) { - // Do we have a buffer to write? - ptrdiff_t unwritten = this->pptr() - this->pbase(); - if (unwritten != 0) { - _STLP_VENDOR_CSTD::fflush(_M_file); - // Test if the write succeeded. - if (this->pptr() - this->pbase() < unwritten) - return traits_type::not_eof(c); - else - return traits_type::eof(); - } - - // We always succeed if we don't have to do anything. - else - return traits_type::not_eof(c); - } - - // Write the character c, and whatever else might be in the buffer. - else { -#ifdef _STLP_WCE - int result = fputc(c, _M_file); -#else - int result = putc(c, _M_file); -#endif - return result != EOF ? result : traits_type::eof(); - } -} - -_STLP_MOVE_TO_STD_NAMESPACE -_STLP_END_NAMESPACE - -// Local Variables: -// mode:C++ -// End: - |