mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r4018) -Backport from trunk (4001:4002):
Add length parameter to FiosMakeSavegameName() and use this function for creating the full path instead of home-brewn snprintf. Use the title of a savegame in the saveload dialog-editbox. This gets rid of the '.sav' appended to each game as well as properly showing UTF-8 saves when this is implemented. Also don't change the text if the save has failed.
This commit is contained in:
parent
f4d5c1b01b
commit
85141929a8
2
hal.h
2
hal.h
|
@ -88,7 +88,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot);
|
||||||
// Delete a name
|
// Delete a name
|
||||||
bool FiosDelete(const char *name);
|
bool FiosDelete(const char *name);
|
||||||
// Make a filename from a name
|
// Make a filename from a name
|
||||||
void FiosMakeSavegameName(char *buf, const char *name);
|
void FiosMakeSavegameName(char *buf, const char *name, size_t size);
|
||||||
|
|
||||||
int CDECL compare_FiosItems(const void *a, const void *b);
|
int CDECL compare_FiosItems(const void *a, const void *b);
|
||||||
|
|
||||||
|
|
15
misc_gui.c
15
misc_gui.c
|
@ -1325,7 +1325,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
|
||||||
DeleteWindow(w);
|
DeleteWindow(w);
|
||||||
} else {
|
} else {
|
||||||
// SLD_SAVE_GAME, SLD_SAVE_SCENARIO copy clicked name to editbox
|
// SLD_SAVE_GAME, SLD_SAVE_SCENARIO copy clicked name to editbox
|
||||||
ttd_strlcpy(WP(w, querystr_d).text.buf, file->name, WP(w, querystr_d).text.maxlength);
|
ttd_strlcpy(WP(w, querystr_d).text.buf, file->title, WP(w, querystr_d).text.maxlength);
|
||||||
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
||||||
InvalidateWidget(w, 10);
|
InvalidateWidget(w, 10);
|
||||||
}
|
}
|
||||||
|
@ -1359,16 +1359,17 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
|
||||||
if (HASBIT(w->click_state, 11)) { /* Delete button clicked */
|
if (HASBIT(w->click_state, 11)) { /* Delete button clicked */
|
||||||
if (!FiosDelete(WP(w,querystr_d).text.buf)) {
|
if (!FiosDelete(WP(w,querystr_d).text.buf)) {
|
||||||
ShowErrorMessage(INVALID_STRING_ID, STR_4008_UNABLE_TO_DELETE_FILE, 0, 0);
|
ShowErrorMessage(INVALID_STRING_ID, STR_4008_UNABLE_TO_DELETE_FILE, 0, 0);
|
||||||
|
} else {
|
||||||
|
BuildFileList();
|
||||||
|
/* Reset file name to current date on successfull delete */
|
||||||
|
if (_saveload_mode == SLD_SAVE_GAME) GenerateFileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
BuildFileList();
|
|
||||||
if (_saveload_mode == SLD_SAVE_GAME) {
|
|
||||||
GenerateFileName(); /* Reset file name to current date */
|
|
||||||
UpdateTextBufferSize(&WP(w, querystr_d).text);
|
|
||||||
}
|
|
||||||
} else if (HASBIT(w->click_state, 12)) { /* Save button clicked */
|
} else if (HASBIT(w->click_state, 12)) { /* Save button clicked */
|
||||||
_switch_mode = SM_SAVE;
|
_switch_mode = SM_SAVE;
|
||||||
FiosMakeSavegameName(_file_to_saveload.name, WP(w,querystr_d).text.buf);
|
FiosMakeSavegameName(_file_to_saveload.name, WP(w,querystr_d).text.buf, sizeof(_file_to_saveload.name));
|
||||||
|
|
||||||
/* In the editor set up the vehicle engines correctly (date might have changed) */
|
/* In the editor set up the vehicle engines correctly (date might have changed) */
|
||||||
if (_game_mode == GM_EDITOR) StartupEngines();
|
if (_game_mode == GM_EDITOR) StartupEngines();
|
||||||
|
|
6
os2.c
6
os2.c
|
@ -401,7 +401,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot)
|
||||||
return STR_4006_UNABLE_TO_READ_DRIVE;
|
return STR_4006_UNABLE_TO_READ_DRIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FiosMakeSavegameName(char *buf, const char *name)
|
void FiosMakeSavegameName(char *buf, const char *name, size_t size)
|
||||||
{
|
{
|
||||||
const char* extension;
|
const char* extension;
|
||||||
const char* period;
|
const char* period;
|
||||||
|
@ -415,14 +415,14 @@ void FiosMakeSavegameName(char *buf, const char *name)
|
||||||
period = strrchr(name, '.');
|
period = strrchr(name, '.');
|
||||||
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
|
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
|
||||||
|
|
||||||
sprintf(buf, "%s\\%s%s", _fios_path, name, extension);
|
snprintf(buf, size, "%s\\%s%s", _fios_path, name, extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FiosDelete(const char *name)
|
bool FiosDelete(const char *name)
|
||||||
{
|
{
|
||||||
char path[512];
|
char path[512];
|
||||||
|
|
||||||
snprintf(path, lengthof(path), "%s\\%s", _fios_path, name);
|
FiosMakeSavegameName(path, name, sizeof(path));
|
||||||
return unlink(path) == 0;
|
return unlink(path) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
unix.c
6
unix.c
|
@ -361,7 +361,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot)
|
||||||
return STR_4005_BYTES_FREE;
|
return STR_4005_BYTES_FREE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FiosMakeSavegameName(char *buf, const char *name)
|
void FiosMakeSavegameName(char *buf, const char *name, size_t size)
|
||||||
{
|
{
|
||||||
const char* extension;
|
const char* extension;
|
||||||
const char* period;
|
const char* period;
|
||||||
|
@ -375,14 +375,14 @@ void FiosMakeSavegameName(char *buf, const char *name)
|
||||||
period = strrchr(name, '.');
|
period = strrchr(name, '.');
|
||||||
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
|
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
|
||||||
|
|
||||||
sprintf(buf, "%s/%s%s", _fios_path, name, extension);
|
snprintf(buf, size, "%s/%s%s", _fios_path, name, extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FiosDelete(const char *name)
|
bool FiosDelete(const char *name)
|
||||||
{
|
{
|
||||||
char path[512];
|
char path[512];
|
||||||
|
|
||||||
snprintf(path, lengthof(path), "%s/%s", _fios_path, name);
|
FiosMakeSavegameName(path, name, sizeof(path));
|
||||||
return unlink(path) == 0;
|
return unlink(path) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
win32.c
6
win32.c
|
@ -963,7 +963,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot)
|
||||||
return sid;
|
return sid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FiosMakeSavegameName(char *buf, const char *name)
|
void FiosMakeSavegameName(char *buf, const char *name, size_t size)
|
||||||
{
|
{
|
||||||
const char* extension;
|
const char* extension;
|
||||||
const char* period;
|
const char* period;
|
||||||
|
@ -977,14 +977,14 @@ void FiosMakeSavegameName(char *buf, const char *name)
|
||||||
period = strrchr(name, '.');
|
period = strrchr(name, '.');
|
||||||
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
|
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
|
||||||
|
|
||||||
sprintf(buf, "%s\\%s%s", _fios_path, name, extension);
|
snprintf(buf, size, "%s\\%s%s", _fios_path, name, extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FiosDelete(const char *name)
|
bool FiosDelete(const char *name)
|
||||||
{
|
{
|
||||||
char path[512];
|
char path[512];
|
||||||
|
|
||||||
snprintf(path, lengthof(path), "%s\\%s", _fios_path, name);
|
FiosMakeSavegameName(path, name, sizeof(path));
|
||||||
return DeleteFile(path) != 0;
|
return DeleteFile(path) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue