diff options
Diffstat (limited to 'ACE/ACEXML/common/FileCharStream.cpp')
-rw-r--r-- | ACE/ACEXML/common/FileCharStream.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/ACE/ACEXML/common/FileCharStream.cpp b/ACE/ACEXML/common/FileCharStream.cpp index 68178850707..f6ed10308d4 100644 --- a/ACE/ACEXML/common/FileCharStream.cpp +++ b/ACE/ACEXML/common/FileCharStream.cpp @@ -12,7 +12,8 @@ #endif /* ACE_USES_WCHAR */ ACEXML_FileCharStream::ACEXML_FileCharStream (void) - : filename_ (0), encoding_ (0), size_ (0), infile_ (0), peek_ (0) + : filename_ (0), encoding_ (0), size_ (0), infile_ (0), + close_infile_ (true), peek_ (0) { } @@ -22,7 +23,7 @@ ACEXML_FileCharStream::~ACEXML_FileCharStream (void) } int -ACEXML_FileCharStream::open (const ACEXML_Char *name) +ACEXML_FileCharStream::use_stream_i (FILE* open_file, const ACEXML_Char *name) { delete[] this->filename_; this->filename_ = 0; @@ -30,7 +31,7 @@ ACEXML_FileCharStream::open (const ACEXML_Char *name) delete[] this->encoding_; this->encoding_ = 0; - this->infile_ = ACE_OS::fopen (name, ACE_TEXT ("r")); + this->infile_ = open_file; if (this->infile_ == 0) return -1; @@ -44,6 +45,23 @@ ACEXML_FileCharStream::open (const ACEXML_Char *name) } int +ACEXML_FileCharStream::use_stream (FILE* open_file, const ACEXML_Char *name) +{ + if (open_file != 0) + ACE_OS::rewind(open_file); + + this->close_infile_ = false; + return use_stream_i(open_file, name); +} + +int +ACEXML_FileCharStream::open (const ACEXML_Char *name) +{ + this->close_infile_ = true; + return use_stream_i(ACE_OS::fopen (name, ACE_TEXT ("r")), name); +} + +int ACEXML_FileCharStream::determine_encoding (void) { if (this->infile_ == 0) @@ -114,7 +132,10 @@ ACEXML_FileCharStream::close (void) { if (this->infile_ != 0) { - ACE_OS::fclose (this->infile_); + if (this->close_infile_) + { + ACE_OS::fclose (this->infile_); + } this->infile_ = 0; } delete[] this->filename_; |