This commit is contained in:
squall-leonhart 2009-03-24 05:01:02 +00:00
parent 6c75bd7d4a
commit 67f3dfd8ce
7 changed files with 88 additions and 51 deletions

View File

@ -149,37 +149,86 @@ void Directories::OnOK()
{ {
CDialog::OnOK(); CDialog::OnOK();
char baseDir[MAX_PATH+1];
char temp[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
CString buffer; CString buffer;
m_romPath.GetWindowText(buffer); m_romPath.GetWindowText(buffer);
if( !buffer.IsEmpty() ) if( !buffer.IsEmpty() )
regSetStringValue( "romdir", buffer ); regSetStringValue( "romdir", buffer );
treatRelativePath( buffer ); if( buffer[0] == '.' ) {
strcpy( temp, baseDir );
strcat( temp, "\\" );
strcat( temp, buffer );
buffer = temp;
}
if( !directoryDoesExist( buffer ) )
SHCreateDirectoryEx( NULL, buffer, NULL );
m_gbcromPath.GetWindowText(buffer); m_gbcromPath.GetWindowText(buffer);
if( !buffer.IsEmpty() ) if( !buffer.IsEmpty() )
regSetStringValue( "gbcromdir", buffer ); regSetStringValue( "gbcromdir", buffer );
treatRelativePath( buffer ); if( buffer[0] == '.' ) {
strcpy( temp, baseDir );
strcat( temp, "\\" );
strcat( temp, buffer );
buffer = temp;
}
if( !directoryDoesExist( buffer ) )
SHCreateDirectoryEx( NULL, buffer, NULL );
m_gbromPath.GetWindowText(buffer); m_gbromPath.GetWindowText(buffer);
if( !buffer.IsEmpty() ) if( !buffer.IsEmpty() )
regSetStringValue( "gbromdir", buffer ); regSetStringValue( "gbromdir", buffer );
treatRelativePath( buffer ); if( buffer[0] == '.' ) {
strcpy( temp, baseDir );
strcat( temp, "\\" );
strcat( temp, buffer );
buffer = temp;
}
if( !directoryDoesExist( buffer ) )
SHCreateDirectoryEx( NULL, buffer, NULL );
m_batteryPath.GetWindowText(buffer); m_batteryPath.GetWindowText(buffer);
if( !buffer.IsEmpty() ) if( !buffer.IsEmpty() )
regSetStringValue( "batteryDir", buffer ); regSetStringValue( "batteryDir", buffer );
treatRelativePath( buffer ); if( buffer[0] == '.' ) {
strcpy( temp, baseDir );
strcat( temp, "\\" );
strcat( temp, buffer );
buffer = temp;
}
if( !directoryDoesExist( buffer ) )
SHCreateDirectoryEx( NULL, buffer, NULL );
m_savePath.GetWindowText(buffer); m_savePath.GetWindowText(buffer);
if( !buffer.IsEmpty() ) if( !buffer.IsEmpty() )
regSetStringValue( "saveDir", buffer ); regSetStringValue( "saveDir", buffer );
treatRelativePath( buffer ); if( buffer[0] == '.' ) {
strcpy( temp, baseDir );
strcat( temp, "\\" );
strcat( temp, buffer );
buffer = temp;
}
if( !directoryDoesExist( buffer ) )
SHCreateDirectoryEx( NULL, buffer, NULL );
m_capturePath.GetWindowText(buffer); m_capturePath.GetWindowText(buffer);
if( !buffer.IsEmpty() ) if( !buffer.IsEmpty() )
regSetStringValue( "captureDir", buffer ); regSetStringValue( "captureDir", buffer );
treatRelativePath( buffer ); if( buffer[0] == '.' ) {
strcpy( temp, baseDir );
strcat( temp, "\\" );
strcat( temp, buffer );
buffer = temp;
}
if( !directoryDoesExist( buffer ) )
SHCreateDirectoryEx( NULL, buffer, NULL );
EndDialog(TRUE); EndDialog(TRUE);
} }
@ -214,3 +263,20 @@ CString Directories::browseForDir(CString title)
} }
return res; return res;
} }
// returns true if the directory does exist
bool Directories::directoryDoesExist(const char *directory)
{
HANDLE hDir;
hDir = CreateFile(
directory,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL );
bool retval = (hDir == INVALID_HANDLE_VALUE) ? false : true;
CloseHandle( hDir );
return retval;
}

View File

@ -30,4 +30,5 @@ private:
CString initialFolderDir; CString initialFolderDir;
CString browseForDir(CString title); CString browseForDir(CString title);
bool directoryDoesExist(const char *directory);
}; };

View File

@ -33,6 +33,7 @@ static char THIS_FILE[] = __FILE__;
#endif #endif
extern void remoteCleanUp(); extern void remoteCleanUp();
extern int gbHardware;
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// MainWnd // MainWnd
@ -47,12 +48,6 @@ MainWnd::~MainWnd()
{ {
} }
bool MainWnd::fileExists( LPCTSTR lpFileName )
{
// check if file exists
return GetFileAttributes( lpFileName ) != INVALID_FILE_ATTRIBUTES;
}
BEGIN_MESSAGE_MAP(MainWnd, CWnd) BEGIN_MESSAGE_MAP(MainWnd, CWnd)
//{{AFX_MSG_MAP(MainWnd) //{{AFX_MSG_MAP(MainWnd)
@ -1022,7 +1017,16 @@ bool MainWnd::fileOpenSelect( int system )
theApp.dir = initialDir; theApp.dir = initialDir;
} }
treatRelativePath( initialDir ); if( initialDir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, initialDir );
initialDir = baseDir;
}
theApp.szFile = _T(""); theApp.szFile = _T("");
@ -1105,7 +1109,9 @@ void MainWnd::screenCapture(int captureNumber)
captureNumber, captureNumber,
ext); ext);
if( fileExists( buffer ) ) { // check if file exists
DWORD dwAttr = GetFileAttributes( buffer );
if( dwAttr != INVALID_FILE_ATTRIBUTES ) {
// screenshot file already exists // screenshot file already exists
screenCapture(++captureNumber); screenCapture(++captureNumber);
// this will recursively use the first non-existent screenshot number // this will recursively use the first non-existent screenshot number

View File

@ -30,9 +30,6 @@ public:
void winSaveCheatList(const char *name); void winSaveCheatList(const char *name);
void winSaveCheatListDefault(); void winSaveCheatListDefault();
private:
bool fileExists( LPCTSTR lpFileName );
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()

View File

@ -2658,34 +2658,3 @@ void Sm60FPS_Sleep()
} }
} }
} }
void treatRelativePath( CString & path )
{
if( path.GetLength() > 1 ) {
if( path.GetAt( 0 ) == '.' ) {
// treat as relative path
char baseDir[MAX_PATH + 1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
CString temp = baseDir;
int pos = temp.ReverseFind( '\\' );
temp.Truncate( pos + 1 );
path.Insert( 0, temp );
// create directories if path does not exist
SHCreateDirectoryEx( NULL, path, NULL );
/* Spacy's implementation:
while( ERROR_PATH_NOT_FOUND == CreateDirectory( path, NULL ) ) {
temp = path;
while( ERROR_PATH_NOT_FOUND == CreateDirectory( temp, NULL ) ) {
pos = temp.ReverseFind( '\\' );
ASSERT( pos != -1 );
if( pos == -1 ) break; // something has gone wrong, abort
temp.Truncate( pos );
}
}
*/
}
}
}

View File

@ -262,5 +262,3 @@ class VBA : public CWinApp
#ifdef MMX #ifdef MMX
extern "C" bool cpu_mmx; extern "C" bool cpu_mmx;
#endif #endif
void treatRelativePath( CString & path );

View File

@ -50,7 +50,7 @@
#define IDS_TOOLTIP_ENHANCE_SOUND 43 #define IDS_TOOLTIP_ENHANCE_SOUND 43
#define IDS_TOOLTIP_SURROUND 44 #define IDS_TOOLTIP_SURROUND 44
#define IDS_TOOLTIP_DECLICKING 45 #define IDS_TOOLTIP_DECLICKING 45
#define IDS_FILTER_ALLROM 46 #define IDS_FILTER_COMPRESSED_FILES 46
#define IDI_MAINICON 101 #define IDI_MAINICON 101
#define IDD_REGISTERS 102 #define IDD_REGISTERS 102
#define IDD_DEBUG 103 #define IDD_DEBUG 103