diff options
Diffstat (limited to 'src/libs/7zip/unix/CPP/Common/StdOutStream.cpp')
-rw-r--r-- | src/libs/7zip/unix/CPP/Common/StdOutStream.cpp | 83 |
1 files changed, 48 insertions, 35 deletions
diff --git a/src/libs/7zip/unix/CPP/Common/StdOutStream.cpp b/src/libs/7zip/unix/CPP/Common/StdOutStream.cpp index b93e255f9..6aed31a31 100644 --- a/src/libs/7zip/unix/CPP/Common/StdOutStream.cpp +++ b/src/libs/7zip/unix/CPP/Common/StdOutStream.cpp @@ -4,23 +4,21 @@ #include <tchar.h> -#include "StdOutStream.h" #include "IntToString.h" +#include "StdOutStream.h" #include "StringConvert.h" - -#ifdef _MSC_VER -// "was declared deprecated" disabling -#pragma warning(disable : 4996 ) -#endif +#include "UTFConvert.h" static const char kNewLineChar = '\n'; static const char *kFileOpenMode = "wt"; -CStdOutStream g_StdOut(stdout); -CStdOutStream g_StdErr(stderr); +extern int g_CodePage; + +CStdOutStream g_StdOut(stdout); +CStdOutStream g_StdErr(stderr); -bool CStdOutStream::Open(const char *fileName) +bool CStdOutStream::Open(const char *fileName) throw() { Close(); _stream = fopen(fileName, kFileOpenMode); @@ -28,7 +26,7 @@ bool CStdOutStream::Open(const char *fileName) return _streamIsOpen; } -bool CStdOutStream::Close() +bool CStdOutStream::Close() throw() { if (!_streamIsOpen) return true; @@ -39,55 +37,70 @@ bool CStdOutStream::Close() return true; } -bool CStdOutStream::Flush() +bool CStdOutStream::Flush() throw() { return (fflush(_stream) == 0); } -CStdOutStream::~CStdOutStream () +CStdOutStream & endl(CStdOutStream & outStream) throw() { - Close(); + return outStream << kNewLineChar; } -CStdOutStream & CStdOutStream::operator<<(CStdOutStream & (*aFunction)(CStdOutStream &)) +CStdOutStream & CStdOutStream::operator<<(const wchar_t *s) { - (*aFunction)(*this); - return *this; + int codePage = g_CodePage; + if (codePage == -1) + codePage = CP_OEMCP; + AString dest; + if (codePage == CP_UTF8) + ConvertUnicodeToUTF8(s, dest); + else + UnicodeStringToMultiByte2(dest, s, (UINT)codePage); + return operator<<((const char *)dest); } -CStdOutStream & endl(CStdOutStream & outStream) +void StdOut_Convert_UString_to_AString(const UString &s, AString &temp) { - return outStream << kNewLineChar; + int codePage = g_CodePage; + if (codePage == -1) + codePage = CP_OEMCP; + if (codePage == CP_UTF8) + ConvertUnicodeToUTF8(s, temp); + else + UnicodeStringToMultiByte2(temp, s, (UINT)codePage); } -CStdOutStream & CStdOutStream::operator<<(const char *string) +void CStdOutStream::PrintUString(const UString &s, AString &temp) { - fputs(string, _stream); - return *this; + StdOut_Convert_UString_to_AString(s, temp); + *this << (const char *)temp; } -CStdOutStream & CStdOutStream::operator<<(const wchar_t *string) +CStdOutStream & CStdOutStream::operator<<(Int32 number) throw() { - *this << (const char *)UnicodeStringToMultiByte(string, CP_OEMCP); - return *this; + char s[32]; + ConvertInt64ToString(number, s); + return operator<<(s); } -CStdOutStream & CStdOutStream::operator<<(char c) +CStdOutStream & CStdOutStream::operator<<(Int64 number) throw() { - fputc(c, _stream); - return *this; + char s[32]; + ConvertInt64ToString(number, s); + return operator<<(s); } -CStdOutStream & CStdOutStream::operator<<(int number) +CStdOutStream & CStdOutStream::operator<<(UInt32 number) throw() { - char textString[32]; - ConvertInt64ToString(number, textString); - return operator<<(textString); + char s[16]; + ConvertUInt32ToString(number, s); + return operator<<(s); } -CStdOutStream & CStdOutStream::operator<<(UInt64 number) +CStdOutStream & CStdOutStream::operator<<(UInt64 number) throw() { - char textString[32]; - ConvertUInt64ToString(number, textString); - return operator<<(textString); + char s[32]; + ConvertUInt64ToString(number, s); + return operator<<(s); } |