[commit] r2314 - trunk/GME/Core
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Thu Aug 29 11:19:40 CDT 2013
Author: ksmyth
Date: Thu Aug 29 11:19:39 2013
New Revision: 2314
Log:
CoreBinFile: support Unicode filenames
Modified:
trunk/GME/Core/CoreBinFile.cpp
trunk/GME/Core/CoreBinFile.h
Modified: trunk/GME/Core/CoreBinFile.cpp
==============================================================================
--- trunk/GME/Core/CoreBinFile.cpp Thu Aug 29 11:19:20 2013 (r2313)
+++ trunk/GME/Core/CoreBinFile.cpp Thu Aug 29 11:19:39 2013 (r2314)
@@ -989,22 +989,22 @@
}
-void CCoreBinFile::SaveProject(const std::string& origfname, bool keepoldname)
+void CCoreBinFile::SaveProject(const std::wstring& origfname, bool keepoldname)
{
ASSERT( !ofs.is_open() );
ASSERT( metaprojectid.size() == 16 );
- std::string filenameout = filename;
+ std::wstring filenameout = filename;
// origfname == filename => file_buffer has filename locked FILE_SHARE_READ
// CopyFile because:
// SetEndOfFileInformationFile
// Preserves extended attributes, NTFS alternate streams, file attributes (and newer Windows: security attributes)
- if (origfname == filename && GetFileAttributesA(origfname.c_str()) != INVALID_FILE_ATTRIBUTES)
+ if (origfname == filename && GetFileAttributesW(origfname.c_str()) != INVALID_FILE_ATTRIBUTES)
{
- filenameout += "tmp";
+ filenameout += L"tmp";
BOOL cancel = FALSE;
- BOOL succ = CopyFileExA(origfname.c_str(), filenameout.c_str(), &prog, NULL, &cancel, 0);
+ BOOL succ = CopyFileExW(origfname.c_str(), filenameout.c_str(), &prog, NULL, &cancel, 0);
if (!succ && GetLastError() != ERROR_REQUEST_ABORTED)
{
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
@@ -1064,7 +1064,7 @@
if (origfname == filename)
{
- BOOL succ = MoveFileExA(filenameout.c_str(), filename.c_str(), MOVEFILE_REPLACE_EXISTING);
+ BOOL succ = MoveFileExW(filenameout.c_str(), filename.c_str(), MOVEFILE_REPLACE_EXISTING);
if (!succ)
{
HR_THROW(HRESULT_FROM_WIN32(GetLastError()));
@@ -1250,9 +1250,10 @@
COMTRY
{
- CopyTo(connection, filename);
- if( !(std::string(filename, 0, 4) == "MGA=") )
- HR_THROW(E_INVALID_USAGE);
+ if (SysStringLen(connection))
+ filename = connection;
+ if (!(std::wstring(filename, 0, 4) == L"MGA="))
+ throw_com_error(E_INVALID_USAGE, L"Connection string must start with MGA=");
filename.erase(0, 4);
@@ -1274,9 +1275,11 @@
COMTRY
{
- CopyTo(connection, filename);
- if( !(std::string(filename, 0, 4) == "MGA=") )
- HR_THROW(E_INVALID_USAGE);
+ if (SysStringLen(connection))
+ filename = connection;
+ if( !(std::wstring(filename, 0, 4) == L"MGA=") )
+ throw_com_error(E_INVALID_USAGE, L"Connection string must start with MGA=");
+
filename.erase(0, 4);
@@ -1301,7 +1304,7 @@
t.first->second.CreateAttributes(mo);
if (filename.empty())
- filename = ".";
+ filename = L".";
modified = false;
@@ -1312,24 +1315,26 @@
STDMETHODIMP CCoreBinFile::SaveProject(BSTR connection, VARIANT_BOOL keepoldname = VARIANT_TRUE)
{
- std::string origfname = filename;
+ std::wstring origfname = filename;
COMTRY
{
- std::string fn;
- CopyTo(connection, fn);
+ std::wstring fn;
+ if (SysStringLen(connection))
+ fn = connection;
if( !fn.empty() )
{
- if( !(std::string(fn, 0, 4) == "MGA=") )
+ if( !(std::wstring(fn, 0, 4) == L"MGA=") )
{
throw_com_error(E_INVALID_USAGE, L"Connection string must start with MGA=");
}
fn.erase(0, 4);
filename = fn;
- if(filename.empty()) filename = ".";
+ if(filename.empty())
+ filename = L".";
}
- if (filename == ".")
+ if (filename == L".")
COMTHROW(E_NAMEMISSING);
SaveProject(origfname, keepoldname != VARIANT_FALSE);
if (keepoldname != VARIANT_FALSE)
@@ -1344,7 +1349,7 @@
COMTRY
{
- if( abort == VARIANT_FALSE && modified && !(filename == "."))
+ if( abort == VARIANT_FALSE && modified && !(filename == L"."))
{
HRESULT hr = SaveProject(NULL);
if (FAILED(hr))
Modified: trunk/GME/Core/CoreBinFile.h
==============================================================================
--- trunk/GME/Core/CoreBinFile.h Thu Aug 29 11:19:20 2013 (r2313)
+++ trunk/GME/Core/CoreBinFile.h Thu Aug 29 11:19:39 2013 (r2314)
@@ -19,9 +19,9 @@
begin(0), end(0), hFile(INVALID_HANDLE_VALUE), hFileMappingObject(INVALID_HANDLE_VALUE)
{ }
- int open(const char* filename) {
+ int open(const wchar_t* filename) {
ASSERT(hFile == INVALID_HANDLE_VALUE);
- hFile = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
+ hFile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return 1;
}
@@ -322,7 +322,7 @@
// ------- Project
public:
- std::string filename;
+ std::wstring filename;
bool read_only;
bool intrans;
bool modified;
@@ -332,7 +332,7 @@
bool InTransaction() const { return intrans; }
void CancelProject() NOTHROW;
- void SaveProject(const std::string& origfname, bool keepoldname);
+ void SaveProject(const std::wstring& origfname, bool keepoldname);
void LoadProject();
public:
More information about the gme-commit
mailing list