diff options
author | weidai <weidai11@users.noreply.github.com> | 2009-07-11 22:50:18 +0000 |
---|---|---|
committer | weidai <weidai11@users.noreply.github.com> | 2009-07-11 22:50:18 +0000 |
commit | 80aaec3131e871f27b32bb633780908d2cf656fe (patch) | |
tree | 3be29c508762394ff9a52d6077c5edc3c72f16d0 /files.cpp | |
parent | 92718c4754c21d77de7309609758d5de578e22b9 (diff) | |
download | cryptopp-git-80aaec3131e871f27b32bb633780908d2cf656fe.tar.gz |
improve Unicode filename handling
Diffstat (limited to 'files.cpp')
-rw-r--r-- | files.cpp | 104 |
1 files changed, 48 insertions, 56 deletions
@@ -27,43 +27,39 @@ void FileStore::StoreInitialize(const NameValuePairs ¶meters) m_stream = NULL; m_file.release(); - const char *fileName; - const wchar_t *fileNameWide; -#ifdef CRYPTOPP_UNIX_AVAILABLE - std::string narrowed; + const char *fileName = NULL; +#if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400 + const wchar_t *fileNameWide = NULL; + if (!parameters.GetValue(Name::InputFileNameWide(), fileNameWide)) #endif + if (!parameters.GetValue(Name::InputFileName(), fileName)) + { + parameters.GetValue(Name::InputStreamPointer(), m_stream); + return; + } - if (parameters.GetValue(Name::InputFileName(), fileName)) - { + ios::openmode binary = parameters.GetValueWithDefault(Name::InputBinaryMode(), true) ? ios::binary : ios::openmode(0); + m_file.reset(new std::ifstream); #ifdef CRYPTOPP_UNIX_AVAILABLE -narrowName: + std::string narrowed; + if (fileNameWide) + fileName = (narrowed = StringNarrow(fileNameWide)).c_str(); #endif - ios::openmode binary = parameters.GetValueWithDefault(Name::InputBinaryMode(), true) ? ios::binary : ios::openmode(0); - m_file.reset(new std::ifstream); - m_file->open(fileName, ios::in | binary); - if (!*m_file) - throw OpenErr(fileName); - m_stream = m_file.get(); - } -#if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400 - else if (parameters.GetValue(Name::InputFileNameWide(), fileNameWide)) +#if _MSC_VER >= 1400 + if (fileNameWide) { - #if _MSC_VER >= 1400 - ios::openmode binary = parameters.GetValueWithDefault(Name::InputBinaryMode(), true) ? ios::binary : ios::openmode(0); - m_file.reset(new std::ifstream); m_file->open(fileNameWide, ios::in | binary); if (!*m_file) - throw OpenErr(StringNarrow(fileNameWide)); - m_stream = m_file.get(); - #else - narrowed = StringNarrow(fileNameWide); - fileName = narrowed.c_str(); - goto narrowName; - #endif + throw OpenErr(StringNarrow(fileNameWide, false)); } #endif - else - parameters.GetValue(Name::InputStreamPointer(), m_stream); + if (fileName) + { + m_file->open(fileName, ios::in | binary); + if (!*m_file) + throw OpenErr(fileName); + } + m_stream = m_file.get(); } lword FileStore::MaxRetrievable() const @@ -187,43 +183,39 @@ void FileSink::IsolatedInitialize(const NameValuePairs ¶meters) m_stream = NULL; m_file.release(); - const char *fileName; - const wchar_t *fileNameWide; -#ifdef CRYPTOPP_UNIX_AVAILABLE - std::string narrowed; + const char *fileName = NULL; +#if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400 + const wchar_t *fileNameWide = NULL; + if (!parameters.GetValue(Name::OutputFileNameWide(), fileNameWide)) #endif + if (!parameters.GetValue(Name::OutputFileName(), fileName)) + { + parameters.GetValue(Name::OutputStreamPointer(), m_stream); + return; + } - if (parameters.GetValue(Name::OutputFileName(), fileName)) - { + ios::openmode binary = parameters.GetValueWithDefault(Name::OutputBinaryMode(), true) ? ios::binary : ios::openmode(0); + m_file.reset(new std::ofstream); #ifdef CRYPTOPP_UNIX_AVAILABLE -narrowName: + std::string narrowed; + if (fileNameWide) + fileName = (narrowed = StringNarrow(fileNameWide)).c_str(); #endif - ios::openmode binary = parameters.GetValueWithDefault(Name::OutputBinaryMode(), true) ? ios::binary : ios::openmode(0); - m_file.reset(new std::ofstream); - m_file->open(fileName, ios::out | ios::trunc | binary); - if (!*m_file) - throw OpenErr(fileName); - m_stream = m_file.get(); - } -#if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400 - else if (parameters.GetValue(Name::OutputFileNameWide(), fileNameWide)) +#if _MSC_VER >= 1400 + if (fileNameWide) { - #if _MSC_VER >= 1400 - ios::openmode binary = parameters.GetValueWithDefault(Name::OutputBinaryMode(), true) ? ios::binary : ios::openmode(0); - m_file.reset(new std::ofstream); m_file->open(fileNameWide, ios::out | ios::trunc | binary); if (!*m_file) - throw OpenErr(StringNarrow(fileNameWide)); - m_stream = m_file.get(); - #else - narrowed = StringNarrow(fileNameWide); - fileName = narrowed.c_str(); - goto narrowName; - #endif + throw OpenErr(StringNarrow(fileNameWide, false)); } #endif - else - parameters.GetValue(Name::OutputStreamPointer(), m_stream); + if (fileName) + { + m_file->open(fileName, ios::out | ios::trunc | binary); + if (!*m_file) + throw OpenErr(fileName); + } + m_stream = m_file.get(); } bool FileSink::IsolatedFlush(bool hardFlush, bool blocking) |