diff --git a/changelog.txt b/changelog.txt index 03d79cd7..481ed3e0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,7 @@ 10-aug-2008 - punkrockguy318 - SDL: cleaned up the SConsruct 10-aug-2008 - punkrockguy318 - SDL: fixed issue where fceu would lock up when file dialogs were opened during fullscreen +11-aug-2008 - zeromus - SF [ 2047004 ] Moviefilenames without extension don't automatically get fm2 10-aug-2008 - zeromus - upgrade to cah4e3's latest mapper 163&164 code to fix a crash in a game 10-aug-2008 - zeromus - remove cnrom chr rom size limit for homebrew roms 10-aug-2008 - punkrockguy318 - SDL: fixed bug where fceux would close when file dialogs were closed diff --git a/src/driver.h b/src/driver.h index e0e07db4..689341f0 100644 --- a/src/driver.h +++ b/src/driver.h @@ -149,8 +149,8 @@ void FCEUD_SoundVolumeAdjust(int); int FCEUI_SelectState(int, int); //"fname" overrides the default save state filename code if non-NULL. -void FCEUI_SaveState(char *fname); -void FCEUI_LoadState(char *fname); +void FCEUI_SaveState(const char *fname); +void FCEUI_LoadState(const char *fname); void FCEUD_SaveStateAs(void); void FCEUD_LoadStateFrom(void); diff --git a/src/drivers/win/replay.cpp b/src/drivers/win/replay.cpp index ce2d4827..26365842 100644 --- a/src/drivers/win/replay.cpp +++ b/src/drivers/win/replay.cpp @@ -59,9 +59,9 @@ static char* GetReplayPath(HWND hwndDlg) return fn; } -static char* GetRecordPath(HWND hwndDlg) +static std::string GetRecordPath(HWND hwndDlg) { - char* fn=0; + std::string fn; char szChoice[MAX_PATH]; char szDrive[MAX_PATH]={0}; char szDirectory[MAX_PATH]={0}; @@ -71,10 +71,17 @@ static char* GetRecordPath(HWND hwndDlg) GetDlgItemText(hwndDlg, IDC_EDIT_FILENAME, szChoice, sizeof(szChoice)); _splitpath(szChoice, szDrive, szDirectory, szFilename, szExt); + + //make sure that there is an extension of fm2 + if(stricmp(szExt,".fm2")) { + strcpy(szExt,".fm2"); + _makepath(szChoice,szDrive,szDirectory,szFilename,szExt); + } + if(szDrive[0]=='\0' && szDirectory[0]=='\0') - fn=strdup(FCEU_MakePath(FCEUMKF_MOVIE, szChoice).c_str()); // need to make a full path + fn=FCEU_MakePath(FCEUMKF_MOVIE, szChoice); // need to make a full path else - fn=strdup(szChoice); // given a full path + fn= szChoice; // given a full path return fn; } @@ -654,14 +661,13 @@ BOOL CALLBACK ReplayDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP static void UpdateRecordDialog(HWND hwndDlg) { int enable=0; - char* fn=0; - fn=GetRecordPath(hwndDlg); + std::string fn=GetRecordPath(hwndDlg); - if(fn) + if(fn!="") { - if(access(fn, F_OK) || - !access(fn, W_OK)) + if(access(fn.c_str(), F_OK) || + !access(fn.c_str(), W_OK)) { LONG lCount = SendDlgItemMessage(hwndDlg, IDC_COMBO_RECORDFROM, CB_GETCOUNT, 0, 0); LONG lIndex = SendDlgItemMessage(hwndDlg, IDC_COMBO_RECORDFROM, CB_GETCURSEL, 0, 0); @@ -671,31 +677,30 @@ static void UpdateRecordDialog(HWND hwndDlg) } } - free(fn); } EnableWindow(GetDlgItem(hwndDlg,IDOK),enable ? TRUE : FALSE); } -static void UpdateRecordDialogPath(HWND hwndDlg, const char* fname) +static void UpdateRecordDialogPath(HWND hwndDlg, const std::string &fname) { char* baseMovieDir = strdup(FCEU_GetPath(FCEUMKF_MOVIE).c_str()); char* fn=0; // display a shortened filename if the file exists in the base movie directory - if(!strncmp(fname, baseMovieDir, strlen(baseMovieDir))) + if(!strncmp(fname.c_str(), baseMovieDir, strlen(baseMovieDir))) { char szDrive[MAX_PATH]={0}; char szDirectory[MAX_PATH]={0}; char szFilename[MAX_PATH]={0}; char szExt[MAX_PATH]={0}; - _splitpath(fname, szDrive, szDirectory, szFilename, szExt); + _splitpath(fname.c_str(), szDrive, szDirectory, szFilename, szExt); fn=(char*)malloc(strlen(szFilename)+strlen(szExt)+1); _makepath(fn, "", "", szFilename, szExt); } else - fn=strdup(fname); + fn=strdup(fname.c_str()); if(fn) { @@ -713,8 +718,7 @@ static BOOL CALLBACK RecordDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP case WM_INITDIALOG: p = (struct CreateMovieParameters*)lParam; UpdateRecordDialogPath(hwndDlg, p->szFilename); - free(p->szFilename); - p->szFilename = 0; + p->szFilename = ""; SendMessage(GetDlgItem(hwndDlg,IDC_EDIT_AUTHOR), CCM_SETUNICODEFORMAT, TRUE, 0); @@ -855,7 +859,7 @@ void FCEUD_MovieRecordTo() { // attempt to load the savestate // FIXME: pop open a messagebox if this fails - FCEUI_LoadState(p.szSavestateFilename); + FCEUI_LoadState(p.szSavestateFilename.c_str()); { extern int loadStateFailed; @@ -866,17 +870,12 @@ void FCEUD_MovieRecordTo() FCEUD_PrintError(str); } } - - free(p.szSavestateFilename); } EMOVIE_FLAG flags = MOVIE_FLAG_NONE; if(p.recordFrom == 0) flags = MOVIE_FLAG_FROM_POWERON; - FCEUI_SaveMovie(p.szFilename, flags, p.author); + FCEUI_SaveMovie(p.szFilename.c_str(), flags, p.author); } - - if(p.szFilename) - free(p.szFilename); } diff --git a/src/drivers/win/window.h b/src/drivers/win/window.h index b0d8651e..d5e532aa 100644 --- a/src/drivers/win/window.h +++ b/src/drivers/win/window.h @@ -8,9 +8,9 @@ struct CreateMovieParameters { - char* szFilename; // on Dialog creation, this is the default filename to display. On return, this is the filename that the user chose. + std::string szFilename; // on Dialog creation, this is the default filename to display. On return, this is the filename that the user chose. int recordFrom; // 0 = "Power-On", 1 = "Reset", 2 = "Now", 3+ = savestate file in szSavestateFilename - char* szSavestateFilename; + std::string szSavestateFilename; std::wstring author; }; diff --git a/src/file.cpp b/src/file.cpp index 9a034ff9..eb915d38 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -517,7 +517,7 @@ std::string FCEU_MakePath(int type, const char* filebase) return ret; } -std::string FCEU_MakeFName(int type, int id1, char *cd1) +std::string FCEU_MakeFName(int type, int id1, const char *cd1) { char ret[FILENAME_MAX] = ""; struct stat tmpstat; diff --git a/src/file.h b/src/file.h index fecbe744..394c34ef 100644 --- a/src/file.h +++ b/src/file.h @@ -81,7 +81,7 @@ int FCEU_fisarchive(FCEUFILE*); void GetFileBase(const char *f); std::string FCEU_GetPath(int type); std::string FCEU_MakePath(int type, const char* filebase); -std::string FCEU_MakeFName(int type, int id1, char *cd1); +std::string FCEU_MakeFName(int type, int id1, const char *cd1); void FCEU_SplitArchiveFilename(std::string src, std::string& archive, std::string& file, std::string& fileToOpen); #define FCEUMKF_STATE 1 diff --git a/src/state.cpp b/src/state.cpp index 0bc440e3..cae7e98f 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -410,7 +410,7 @@ bool FCEUSS_SaveMS(std::ostream* outstream, int compressionLevel) } -void FCEUSS_Save(char *fname) +void FCEUSS_Save(const char *fname) { std::fstream* st = 0; char *fn; @@ -608,7 +608,7 @@ bool FCEUSS_LoadFP(std::istream* is, ENUM_SSLOADPARAMS params) } -bool FCEUSS_Load(char *fname) +bool FCEUSS_Load(const char *fname) { std::fstream* st; @@ -758,7 +758,7 @@ int FCEUI_SelectState(int w, int show) return oldstate; } -void FCEUI_SaveState(char *fname) +void FCEUI_SaveState(const char *fname) { if(!FCEU_IsValidUI(FCEUI_SAVESTATE)) return; @@ -768,7 +768,7 @@ void FCEUI_SaveState(char *fname) int loadStateFailed = 0; // hack, this function should return a value instead -void FCEUI_LoadState(char *fname) +void FCEUI_LoadState(const char *fname) { if(!FCEU_IsValidUI(FCEUI_LOADSTATE)) return; diff --git a/src/state.h b/src/state.h index 09f63b09..1fad0bf9 100644 --- a/src/state.h +++ b/src/state.h @@ -26,8 +26,8 @@ enum ENUM_SSLOADPARAMS SSLOADPARAM_BACKUP, }; -void FCEUSS_Save(char *); -bool FCEUSS_Load(char *); +void FCEUSS_Save(const char *); +bool FCEUSS_Load(const char *); //zlib values: 0 (none) through 9 (max) or -1 (default) bool FCEUSS_SaveMS(std::ostream* outstream, int compressionLevel);