'selectsaved' bug fix

I have to manually uncompress save files before running nethack
under gdb control or they can't be opened.  Normally that works ok,
but if the 'selectsaved' option is enabled, the code to look up
character names from their save files was mangling the file names
when stripping off the non-existent compression suffix, so couldn't
open them.
This commit is contained in:
PatR
2021-01-13 17:24:27 -08:00
parent e41c029262
commit c131e6df18
2 changed files with 23 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.426 $ $NHDT-Date: 1610410779 2021/01/12 00:19:39 $
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.428 $ $NHDT-Date: 1610587460 2021/01/14 01:24:20 $
General Fixes and Modified Features
-----------------------------------
@@ -365,6 +365,9 @@ transforming a potion by dipping a unicorn horn into it could result in the
potion being dropped due to 'pickup_burden' if encumbrance was already
over threshold before dipping but within it after removal from invent
give barrow wights a cold touch
for configuration using external compression on save files that applied a name
suffix, 'selectsaved' (restore via menu) couldn't handle any which had
been manually uncompressed, mangling file name trying to remove suffix
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 files.c $NHDT-Date: 1610153478 2021/01/09 00:51:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.322 $ */
/* NetHack 3.7 files.c $NHDT-Date: 1610587460 2021/01/14 01:24:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.323 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1175,7 +1175,14 @@ const char *filename;
Strcpy(g.SAVEF, filename);
#ifdef COMPRESS_EXTENSION
g.SAVEF[strlen(g.SAVEF) - strlen(COMPRESS_EXTENSION)] = '\0';
{
/* if COMPRESS_EXTENSION is present, strip it off */
int sln = (int) strlen(g.SAVEF),
xln = (int) strlen(COMPRESS_EXTENSION);
if (sln > xln && !strcmp(&g.SAVEF[sln - xln], COMPRESS_EXTENSION))
g.SAVEF[sln - xln] = '\0';
}
#endif
nh_uncompress(g.SAVEF);
if ((nhfp = open_savefile()) != 0) {
@@ -1374,8 +1381,15 @@ FILE *stream;
boolean uncomp;
{
if (freopen(filename, mode, stream) == (FILE *) 0) {
(void) fprintf(stderr, "freopen of %s for %scompress failed\n",
filename, uncomp ? "un" : "");
const char *details;
#if defined(NHSTDC) && !defined(NOTSTDC)
if ((details = strerror(errno)) == 0)
#endif
details = "";
(void) fprintf(stderr,
"freopen of %s for %scompress failed; (%d) %s\n",
filename, uncomp ? "un" : "", errno, details);
nh_terminate(EXIT_FAILURE);
}
}
@@ -1392,7 +1406,7 @@ docompress_file(filename, uncomp)
const char *filename;
boolean uncomp;
{
char cfn[80];
char cfn[SAVESIZE];
FILE *cf;
const char *args[10];
#ifdef COMPRESS_OPTIONS