more static analyzer adjustments
This commit is contained in:
@@ -1036,7 +1036,7 @@ extern char *fname_encode(const char *, char,
|
|||||||
extern char *fname_decode(char, char *, char *, int) NONNULLPTRS;
|
extern char *fname_decode(char, char *, char *, int) NONNULLPTRS;
|
||||||
extern const char *fqname(const char *, int, int);
|
extern const char *fqname(const char *, int, int);
|
||||||
extern FILE *fopen_datafile(const char *, const char *, int) NONNULLPTRS;
|
extern FILE *fopen_datafile(const char *, const char *, int) NONNULLPTRS;
|
||||||
extern void zero_nhfile(NHFILE *) NONNULLARG1;
|
extern void init_nhfile(NHFILE *) NONNULLARG1;
|
||||||
extern void close_nhfile(NHFILE *) NONNULLARG1;
|
extern void close_nhfile(NHFILE *) NONNULLARG1;
|
||||||
extern void rewind_nhfile(NHFILE *) NONNULLARG1;
|
extern void rewind_nhfile(NHFILE *) NONNULLARG1;
|
||||||
extern void set_levelfile_name(char *, int) NONNULLARG1;
|
extern void set_levelfile_name(char *, int) NONNULLARG1;
|
||||||
@@ -1059,6 +1059,7 @@ extern void set_error_savefile(void);
|
|||||||
extern NHFILE *create_savefile(void);
|
extern NHFILE *create_savefile(void);
|
||||||
extern NHFILE *open_savefile(void);
|
extern NHFILE *open_savefile(void);
|
||||||
extern int delete_savefile(void);
|
extern int delete_savefile(void);
|
||||||
|
extern NHFILE *get_freeing_nhfile(void);
|
||||||
extern NHFILE *restore_saved_game(void);
|
extern NHFILE *restore_saved_game(void);
|
||||||
extern int check_panic_save(void);
|
extern int check_panic_save(void);
|
||||||
#ifdef SELECTSAVED
|
#ifdef SELECTSAVED
|
||||||
|
|||||||
@@ -981,7 +981,7 @@ enter_explore_mode(void)
|
|||||||
void
|
void
|
||||||
makemap_prepost(boolean pre, boolean wiztower)
|
makemap_prepost(boolean pre, boolean wiztower)
|
||||||
{
|
{
|
||||||
NHFILE tmpnhfp;
|
NHFILE *tmpnhfp;
|
||||||
struct monst *mtmp;
|
struct monst *mtmp;
|
||||||
|
|
||||||
if (pre) {
|
if (pre) {
|
||||||
@@ -1029,9 +1029,9 @@ makemap_prepost(boolean pre, boolean wiztower)
|
|||||||
dobjsfree();
|
dobjsfree();
|
||||||
|
|
||||||
/* discard current level; "saving" is used to release dynamic data */
|
/* discard current level; "saving" is used to release dynamic data */
|
||||||
zero_nhfile(&tmpnhfp); /* also sets fd to -1 as desired */
|
tmpnhfp = get_freeing_nhfile();
|
||||||
tmpnhfp.mode = FREEING;
|
savelev(tmpnhfp, ledger_no(&u.uz));
|
||||||
savelev(&tmpnhfp, ledger_no(&u.uz));
|
close_nhfile(tmpnhfp);
|
||||||
} else {
|
} else {
|
||||||
vision_reset();
|
vision_reset();
|
||||||
gv.vision_full_recalc = 1;
|
gv.vision_full_recalc = 1;
|
||||||
|
|||||||
45
src/files.c
45
src/files.c
@@ -458,23 +458,35 @@ static const int bei = 1;
|
|||||||
#define IS_BIGENDIAN() ( (*(char*)&bei) == 0 )
|
#define IS_BIGENDIAN() ( (*(char*)&bei) == 0 )
|
||||||
|
|
||||||
void
|
void
|
||||||
zero_nhfile(NHFILE *nhfp)
|
init_nhfile(NHFILE *nhfp)
|
||||||
{
|
{
|
||||||
|
if (nhfp->structlevel) {
|
||||||
|
if (nhfp->fd != -1) {
|
||||||
|
impossible("Warning - Unclosed structlevel file being reinitialized");
|
||||||
|
(void) nhclose(nhfp->fd);
|
||||||
|
}
|
||||||
|
} else if (nhfp->fpdef) {
|
||||||
|
if (nhfp->fpdef) {
|
||||||
|
impossible("Warning - Unclosed fieldlevel file being reinitialized");
|
||||||
|
(void) fclose(nhfp->fpdef);
|
||||||
|
}
|
||||||
|
}
|
||||||
nhfp->fd = -1;
|
nhfp->fd = -1;
|
||||||
|
nhfp->fpdef = (FILE *) 0;
|
||||||
|
|
||||||
nhfp->mode = COUNTING;
|
nhfp->mode = COUNTING;
|
||||||
nhfp->structlevel = TRUE;
|
nhfp->structlevel = TRUE;
|
||||||
nhfp->fieldlevel = FALSE;
|
nhfp->fieldlevel = FALSE;
|
||||||
nhfp->addinfo = FALSE;
|
nhfp->addinfo = FALSE;
|
||||||
nhfp->bendian = IS_BIGENDIAN();
|
nhfp->bendian = IS_BIGENDIAN();
|
||||||
nhfp->fpdef = (FILE *) 0;
|
|
||||||
nhfp->fplog = (FILE *) 0;
|
nhfp->fplog = (FILE *) 0;
|
||||||
nhfp->fpdebug = (FILE *) 0;
|
nhfp->fpdebug = (FILE *) 0;
|
||||||
nhfp->rcount = nhfp->wcount = 0;
|
nhfp->rcount = nhfp->wcount = 0;
|
||||||
nhfp->eof = FALSE;
|
nhfp->eof = FALSE;
|
||||||
nhfp->fnidx = 0;
|
nhfp->fnidx = 0;
|
||||||
nhfp->style.deflt = FALSE;
|
nhfp->style.deflt = FALSE;
|
||||||
nhfp->style.binary = TRUE;
|
nhfp->style.binary = TRUE;
|
||||||
nhfp->nhfpconvert = 0;
|
nhfp->nhfpconvert = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SFCTOOL
|
#ifndef SFCTOOL
|
||||||
@@ -483,9 +495,10 @@ staticfn
|
|||||||
NHFILE *
|
NHFILE *
|
||||||
new_nhfile(void)
|
new_nhfile(void)
|
||||||
{
|
{
|
||||||
NHFILE *nhfp = (NHFILE *) alloc(sizeof(NHFILE));
|
NHFILE *nhfp = (NHFILE *) alloc(sizeof *nhfp);
|
||||||
|
|
||||||
zero_nhfile(nhfp);
|
memset((genericptr_t) nhfp, 0, sizeof *nhfp);
|
||||||
|
init_nhfile(nhfp);
|
||||||
return nhfp;
|
return nhfp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +509,7 @@ void
|
|||||||
free_nhfile(NHFILE *nhfp)
|
free_nhfile(NHFILE *nhfp)
|
||||||
{
|
{
|
||||||
if (nhfp) {
|
if (nhfp) {
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free(nhfp);
|
free(nhfp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -514,7 +527,7 @@ close_nhfile(NHFILE *nhfp)
|
|||||||
(void) fclose(nhfp->fplog);
|
(void) fclose(nhfp->fplog);
|
||||||
if (nhfp->fpdebug)
|
if (nhfp->fpdebug)
|
||||||
(void) fclose(nhfp->fpdebug);
|
(void) fclose(nhfp->fpdebug);
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free_nhfile(nhfp);
|
free_nhfile(nhfp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -559,7 +572,7 @@ viable_nhfile(NHFILE *nhfp)
|
|||||||
if (nhfp->fpdebug)
|
if (nhfp->fpdebug)
|
||||||
(void) fclose(nhfp->fpdebug);
|
(void) fclose(nhfp->fpdebug);
|
||||||
}
|
}
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free_nhfile(nhfp);
|
free_nhfile(nhfp);
|
||||||
nhfp = (NHFILE *) 0;
|
nhfp = (NHFILE *) 0;
|
||||||
}
|
}
|
||||||
@@ -1254,6 +1267,18 @@ restore_saved_game(void)
|
|||||||
return nhfp;
|
return nhfp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NHFILE *
|
||||||
|
get_freeing_nhfile(void)
|
||||||
|
{
|
||||||
|
NHFILE *nhfp = (NHFILE *) 0;
|
||||||
|
|
||||||
|
nhfp = new_nhfile(); /* also sets fd to -1 */
|
||||||
|
if (nhfp) {
|
||||||
|
nhfp->mode = FREEING;
|
||||||
|
}
|
||||||
|
return nhfp;
|
||||||
|
}
|
||||||
|
|
||||||
/* called if there is no save file for current character */
|
/* called if there is no save file for current character */
|
||||||
int
|
int
|
||||||
check_panic_save(void)
|
check_panic_save(void)
|
||||||
|
|||||||
@@ -806,15 +806,11 @@ dorecover(NHFILE *nhfp)
|
|||||||
*/
|
*/
|
||||||
getlev(nhfp, 0, (xint8) 0);
|
getlev(nhfp, 0, (xint8) 0);
|
||||||
if (!restgamestate(nhfp)) {
|
if (!restgamestate(nhfp)) {
|
||||||
NHFILE tnhfp;
|
NHFILE *tnhfp = get_freeing_nhfile();
|
||||||
|
|
||||||
display_nhwindow(WIN_MESSAGE, TRUE);
|
display_nhwindow(WIN_MESSAGE, TRUE);
|
||||||
zero_nhfile(&tnhfp);
|
savelev(tnhfp, 0); /* discard current level */
|
||||||
tnhfp.mode = FREEING;
|
close_nhfile(tnhfp);
|
||||||
tnhfp.fd = -1;
|
|
||||||
savelev(&tnhfp, 0); /* discard current level */
|
|
||||||
/* no need for close_nhfile(&tnhfp), which
|
|
||||||
is not really affiliated with an open file */
|
|
||||||
close_nhfile(nhfp);
|
close_nhfile(nhfp);
|
||||||
(void) delete_savefile();
|
(void) delete_savefile();
|
||||||
u.usteed_mid = u.ustuck_mid = 0;
|
u.usteed_mid = u.ustuck_mid = 0;
|
||||||
|
|||||||
40
src/save.c
40
src/save.c
@@ -1037,13 +1037,12 @@ void
|
|||||||
free_dungeons(void)
|
free_dungeons(void)
|
||||||
{
|
{
|
||||||
#ifdef FREE_ALL_MEMORY
|
#ifdef FREE_ALL_MEMORY
|
||||||
NHFILE tnhfp;
|
NHFILE *tnhfp = get_freeing_nhfile();
|
||||||
|
|
||||||
zero_nhfile(&tnhfp); /* also sets fd to -1 */
|
savelevchn(tnhfp);
|
||||||
tnhfp.mode = FREEING;
|
save_dungeon(tnhfp, FALSE, TRUE);
|
||||||
savelevchn(&tnhfp);
|
|
||||||
save_dungeon(&tnhfp, FALSE, TRUE);
|
|
||||||
free_luathemes(all_themes);
|
free_luathemes(all_themes);
|
||||||
|
close_nhfile(tnhfp);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1054,13 +1053,11 @@ extern int options_set_window_colors_flag; /* options.c */
|
|||||||
void
|
void
|
||||||
freedynamicdata(void)
|
freedynamicdata(void)
|
||||||
{
|
{
|
||||||
NHFILE tnhfp;
|
NHFILE *tnhfp = get_freeing_nhfile();
|
||||||
|
|
||||||
#if defined(UNIX) && defined(MAIL)
|
#if defined(UNIX) && defined(MAIL)
|
||||||
free_maildata();
|
free_maildata();
|
||||||
#endif
|
#endif
|
||||||
zero_nhfile(&tnhfp); /* also sets fd to -1 */
|
|
||||||
tnhfp.mode = FREEING;
|
|
||||||
free_menu_coloring();
|
free_menu_coloring();
|
||||||
free_invbuf(); /* let_to_name (invent.c) */
|
free_invbuf(); /* let_to_name (invent.c) */
|
||||||
free_youbuf(); /* You_buf,&c (pline.c) */
|
free_youbuf(); /* You_buf,&c (pline.c) */
|
||||||
@@ -1069,18 +1066,18 @@ freedynamicdata(void)
|
|||||||
tmp_at(DISP_FREEMEM, 0); /* temporary display effects */
|
tmp_at(DISP_FREEMEM, 0); /* temporary display effects */
|
||||||
purge_all_custom_entries();
|
purge_all_custom_entries();
|
||||||
#ifdef FREE_ALL_MEMORY
|
#ifdef FREE_ALL_MEMORY
|
||||||
#define free_current_level() savelev(&tnhfp, -1)
|
#define free_current_level() savelev(tnhfp, -1)
|
||||||
#define freeobjchn(X) (saveobjchn(&tnhfp, &X), X = 0)
|
#define freeobjchn(X) (saveobjchn(tnhfp, &X), X = 0)
|
||||||
#define freemonchn(X) (savemonchn(&tnhfp, X), X = 0)
|
#define freemonchn(X) (savemonchn(tnhfp, X), X = 0)
|
||||||
#define freefruitchn() savefruitchn(&tnhfp)
|
#define freefruitchn() savefruitchn(tnhfp)
|
||||||
#define freenames() savenames(&tnhfp)
|
#define freenames() savenames(tnhfp)
|
||||||
#define free_killers() save_killers(&tnhfp)
|
#define free_killers() save_killers(tnhfp)
|
||||||
#define free_oracles() save_oracles(&tnhfp)
|
#define free_oracles() save_oracles(tnhfp)
|
||||||
#define free_waterlevel() save_waterlevel(&tnhfp)
|
#define free_waterlevel() save_waterlevel(tnhfp)
|
||||||
#define free_timers(R) save_timers(&tnhfp, R)
|
#define free_timers(R) save_timers(tnhfp, R)
|
||||||
#define free_light_sources(R) save_light_sources(&tnhfp, R)
|
#define free_light_sources(R) save_light_sources(tnhfp, R)
|
||||||
#define free_animals() mon_animal_list(FALSE)
|
#define free_animals() mon_animal_list(FALSE)
|
||||||
#define discard_gamelog() save_gamelog(&tnhfp);
|
#define discard_gamelog() save_gamelog(tnhfp);
|
||||||
|
|
||||||
/* move-specific data */
|
/* move-specific data */
|
||||||
dmonsfree(); /* release dead monsters */
|
dmonsfree(); /* release dead monsters */
|
||||||
@@ -1155,6 +1152,11 @@ freedynamicdata(void)
|
|||||||
if (glyphid_cache_status())
|
if (glyphid_cache_status())
|
||||||
free_glyphid_cache();
|
free_glyphid_cache();
|
||||||
|
|
||||||
|
if (tnhfp) {
|
||||||
|
close_nhfile(tnhfp);
|
||||||
|
tnhfp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* last, because it frees data that might be used by panic() to provide
|
/* last, because it frees data that might be used by panic() to provide
|
||||||
feedback to the user; conceivably other freeing might trigger panic */
|
feedback to the user; conceivably other freeing might trigger panic */
|
||||||
sysopt_release(); /* SYSCF strings */
|
sysopt_release(); /* SYSCF strings */
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ static int length_without_val(const char *user_string, int len);
|
|||||||
static void usage(int argc, char **argv);
|
static void usage(int argc, char **argv);
|
||||||
static const char *briefname(const char *fnam);
|
static const char *briefname(const char *fnam);
|
||||||
|
|
||||||
void zero_nhfile(NHFILE *);
|
void init_nhfile(NHFILE *);
|
||||||
NHFILE *new_nhfile(void);
|
NHFILE *new_nhfile(void);
|
||||||
void free_nhfile(NHFILE *);
|
void free_nhfile(NHFILE *);
|
||||||
void my_close_nhfile(NHFILE *);
|
void my_close_nhfile(NHFILE *);
|
||||||
@@ -462,7 +462,7 @@ open_srcfile(const char *fnam, enum saveformats mystyle)
|
|||||||
if (nhfp && nhfp->structlevel) {
|
if (nhfp && nhfp->structlevel) {
|
||||||
fd = open(fq_name, O_RDONLY | O_BINARY, 0);
|
fd = open(fq_name, O_RDONLY | O_BINARY, 0);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free_nhfile(nhfp);
|
free_nhfile(nhfp);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\nsfctool error - unable to open historical-style "
|
"\nsfctool error - unable to open historical-style "
|
||||||
@@ -482,7 +482,7 @@ open_srcfile(const char *fnam, enum saveformats mystyle)
|
|||||||
|
|
||||||
nhfp->fpdef = fopen(fnam, RDBMODE);
|
nhfp->fpdef = fopen(fnam, RDBMODE);
|
||||||
if (!nhfp->fpdef) {
|
if (!nhfp->fpdef) {
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free_nhfile(nhfp);
|
free_nhfile(nhfp);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\nsfctool error - unable to open fieldlevel-style "
|
"\nsfctool error - unable to open fieldlevel-style "
|
||||||
@@ -577,7 +577,7 @@ create_dstfile(char *fnam, enum saveformats mystyle)
|
|||||||
fd = creat(dstfnam, FCMASK);
|
fd = creat(dstfnam, FCMASK);
|
||||||
#endif
|
#endif
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free_nhfile(nhfp);
|
free_nhfile(nhfp);
|
||||||
fprintf(
|
fprintf(
|
||||||
stderr,
|
stderr,
|
||||||
@@ -594,7 +594,7 @@ create_dstfile(char *fnam, enum saveformats mystyle)
|
|||||||
fq_name = fqname(dstfnam, SAVEPREFIX, 0);
|
fq_name = fqname(dstfnam, SAVEPREFIX, 0);
|
||||||
nhfp->fpdef = fopen(fq_name, WRBMODE);
|
nhfp->fpdef = fopen(fq_name, WRBMODE);
|
||||||
if (!nhfp->fpdef) {
|
if (!nhfp->fpdef) {
|
||||||
zero_nhfile(nhfp);
|
init_nhfile(nhfp);
|
||||||
free_nhfile(nhfp);
|
free_nhfile(nhfp);
|
||||||
fprintf(
|
fprintf(
|
||||||
stderr,
|
stderr,
|
||||||
|
|||||||
Reference in New Issue
Block a user