more static analyzer adjustments
This commit is contained in:
@@ -981,7 +981,7 @@ enter_explore_mode(void)
|
||||
void
|
||||
makemap_prepost(boolean pre, boolean wiztower)
|
||||
{
|
||||
NHFILE tmpnhfp;
|
||||
NHFILE *tmpnhfp;
|
||||
struct monst *mtmp;
|
||||
|
||||
if (pre) {
|
||||
@@ -1029,9 +1029,9 @@ makemap_prepost(boolean pre, boolean wiztower)
|
||||
dobjsfree();
|
||||
|
||||
/* discard current level; "saving" is used to release dynamic data */
|
||||
zero_nhfile(&tmpnhfp); /* also sets fd to -1 as desired */
|
||||
tmpnhfp.mode = FREEING;
|
||||
savelev(&tmpnhfp, ledger_no(&u.uz));
|
||||
tmpnhfp = get_freeing_nhfile();
|
||||
savelev(tmpnhfp, ledger_no(&u.uz));
|
||||
close_nhfile(tmpnhfp);
|
||||
} else {
|
||||
vision_reset();
|
||||
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 )
|
||||
|
||||
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->fpdef = (FILE *) 0;
|
||||
|
||||
nhfp->mode = COUNTING;
|
||||
nhfp->structlevel = TRUE;
|
||||
nhfp->fieldlevel = FALSE;
|
||||
nhfp->addinfo = FALSE;
|
||||
nhfp->bendian = IS_BIGENDIAN();
|
||||
nhfp->fpdef = (FILE *) 0;
|
||||
nhfp->fplog = (FILE *) 0;
|
||||
nhfp->fpdebug = (FILE *) 0;
|
||||
nhfp->rcount = nhfp->wcount = 0;
|
||||
nhfp->eof = FALSE;
|
||||
nhfp->fnidx = 0;
|
||||
nhfp->style.deflt = FALSE;
|
||||
nhfp->style.binary = TRUE;
|
||||
nhfp->nhfpconvert = 0;
|
||||
nhfp->style.deflt = FALSE;
|
||||
nhfp->style.binary = TRUE;
|
||||
nhfp->nhfpconvert = 0;
|
||||
}
|
||||
|
||||
#ifndef SFCTOOL
|
||||
@@ -483,9 +495,10 @@ staticfn
|
||||
NHFILE *
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -496,7 +509,7 @@ void
|
||||
free_nhfile(NHFILE *nhfp)
|
||||
{
|
||||
if (nhfp) {
|
||||
zero_nhfile(nhfp);
|
||||
init_nhfile(nhfp);
|
||||
free(nhfp);
|
||||
}
|
||||
}
|
||||
@@ -514,7 +527,7 @@ close_nhfile(NHFILE *nhfp)
|
||||
(void) fclose(nhfp->fplog);
|
||||
if (nhfp->fpdebug)
|
||||
(void) fclose(nhfp->fpdebug);
|
||||
zero_nhfile(nhfp);
|
||||
init_nhfile(nhfp);
|
||||
free_nhfile(nhfp);
|
||||
}
|
||||
|
||||
@@ -559,7 +572,7 @@ viable_nhfile(NHFILE *nhfp)
|
||||
if (nhfp->fpdebug)
|
||||
(void) fclose(nhfp->fpdebug);
|
||||
}
|
||||
zero_nhfile(nhfp);
|
||||
init_nhfile(nhfp);
|
||||
free_nhfile(nhfp);
|
||||
nhfp = (NHFILE *) 0;
|
||||
}
|
||||
@@ -1254,6 +1267,18 @@ restore_saved_game(void)
|
||||
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 */
|
||||
int
|
||||
check_panic_save(void)
|
||||
|
||||
@@ -806,15 +806,11 @@ dorecover(NHFILE *nhfp)
|
||||
*/
|
||||
getlev(nhfp, 0, (xint8) 0);
|
||||
if (!restgamestate(nhfp)) {
|
||||
NHFILE tnhfp;
|
||||
NHFILE *tnhfp = get_freeing_nhfile();
|
||||
|
||||
display_nhwindow(WIN_MESSAGE, TRUE);
|
||||
zero_nhfile(&tnhfp);
|
||||
tnhfp.mode = FREEING;
|
||||
tnhfp.fd = -1;
|
||||
savelev(&tnhfp, 0); /* discard current level */
|
||||
/* no need for close_nhfile(&tnhfp), which
|
||||
is not really affiliated with an open file */
|
||||
savelev(tnhfp, 0); /* discard current level */
|
||||
close_nhfile(tnhfp);
|
||||
close_nhfile(nhfp);
|
||||
(void) delete_savefile();
|
||||
u.usteed_mid = u.ustuck_mid = 0;
|
||||
|
||||
40
src/save.c
40
src/save.c
@@ -1037,13 +1037,12 @@ void
|
||||
free_dungeons(void)
|
||||
{
|
||||
#ifdef FREE_ALL_MEMORY
|
||||
NHFILE tnhfp;
|
||||
NHFILE *tnhfp = get_freeing_nhfile();
|
||||
|
||||
zero_nhfile(&tnhfp); /* also sets fd to -1 */
|
||||
tnhfp.mode = FREEING;
|
||||
savelevchn(&tnhfp);
|
||||
save_dungeon(&tnhfp, FALSE, TRUE);
|
||||
savelevchn(tnhfp);
|
||||
save_dungeon(tnhfp, FALSE, TRUE);
|
||||
free_luathemes(all_themes);
|
||||
close_nhfile(tnhfp);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
@@ -1054,13 +1053,11 @@ extern int options_set_window_colors_flag; /* options.c */
|
||||
void
|
||||
freedynamicdata(void)
|
||||
{
|
||||
NHFILE tnhfp;
|
||||
NHFILE *tnhfp = get_freeing_nhfile();
|
||||
|
||||
#if defined(UNIX) && defined(MAIL)
|
||||
free_maildata();
|
||||
#endif
|
||||
zero_nhfile(&tnhfp); /* also sets fd to -1 */
|
||||
tnhfp.mode = FREEING;
|
||||
free_menu_coloring();
|
||||
free_invbuf(); /* let_to_name (invent.c) */
|
||||
free_youbuf(); /* You_buf,&c (pline.c) */
|
||||
@@ -1069,18 +1066,18 @@ freedynamicdata(void)
|
||||
tmp_at(DISP_FREEMEM, 0); /* temporary display effects */
|
||||
purge_all_custom_entries();
|
||||
#ifdef FREE_ALL_MEMORY
|
||||
#define free_current_level() savelev(&tnhfp, -1)
|
||||
#define freeobjchn(X) (saveobjchn(&tnhfp, &X), X = 0)
|
||||
#define freemonchn(X) (savemonchn(&tnhfp, X), X = 0)
|
||||
#define freefruitchn() savefruitchn(&tnhfp)
|
||||
#define freenames() savenames(&tnhfp)
|
||||
#define free_killers() save_killers(&tnhfp)
|
||||
#define free_oracles() save_oracles(&tnhfp)
|
||||
#define free_waterlevel() save_waterlevel(&tnhfp)
|
||||
#define free_timers(R) save_timers(&tnhfp, R)
|
||||
#define free_light_sources(R) save_light_sources(&tnhfp, R)
|
||||
#define free_current_level() savelev(tnhfp, -1)
|
||||
#define freeobjchn(X) (saveobjchn(tnhfp, &X), X = 0)
|
||||
#define freemonchn(X) (savemonchn(tnhfp, X), X = 0)
|
||||
#define freefruitchn() savefruitchn(tnhfp)
|
||||
#define freenames() savenames(tnhfp)
|
||||
#define free_killers() save_killers(tnhfp)
|
||||
#define free_oracles() save_oracles(tnhfp)
|
||||
#define free_waterlevel() save_waterlevel(tnhfp)
|
||||
#define free_timers(R) save_timers(tnhfp, R)
|
||||
#define free_light_sources(R) save_light_sources(tnhfp, R)
|
||||
#define free_animals() mon_animal_list(FALSE)
|
||||
#define discard_gamelog() save_gamelog(&tnhfp);
|
||||
#define discard_gamelog() save_gamelog(tnhfp);
|
||||
|
||||
/* move-specific data */
|
||||
dmonsfree(); /* release dead monsters */
|
||||
@@ -1155,6 +1152,11 @@ freedynamicdata(void)
|
||||
if (glyphid_cache_status())
|
||||
free_glyphid_cache();
|
||||
|
||||
if (tnhfp) {
|
||||
close_nhfile(tnhfp);
|
||||
tnhfp = 0;
|
||||
}
|
||||
|
||||
/* last, because it frees data that might be used by panic() to provide
|
||||
feedback to the user; conceivably other freeing might trigger panic */
|
||||
sysopt_release(); /* SYSCF strings */
|
||||
|
||||
Reference in New Issue
Block a user