summaryrefslogtreecommitdiff
path: root/files.cpp
diff options
context:
space:
mode:
authorweidai <weidai11@users.noreply.github.com>2009-07-11 22:50:18 +0000
committerweidai <weidai11@users.noreply.github.com>2009-07-11 22:50:18 +0000
commit80aaec3131e871f27b32bb633780908d2cf656fe (patch)
tree3be29c508762394ff9a52d6077c5edc3c72f16d0 /files.cpp
parent92718c4754c21d77de7309609758d5de578e22b9 (diff)
downloadcryptopp-git-80aaec3131e871f27b32bb633780908d2cf656fe.tar.gz
improve Unicode filename handling
Diffstat (limited to 'files.cpp')
-rw-r--r--files.cpp104
1 files changed, 48 insertions, 56 deletions
diff --git a/files.cpp b/files.cpp
index 4d4f9364..6a29ed55 100644
--- a/files.cpp
+++ b/files.cpp
@@ -27,43 +27,39 @@ void FileStore::StoreInitialize(const NameValuePairs &parameters)
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 &parameters)
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)