Issue reported by schauveau: when the command line specifies the
'--nethackrc=file' option (Unix, including linux and OSX, only) the
value of 'file' was set in pointer g.cmdline_rcfile and the options
parsing made a copy of that pointer rather than of what it pointed
to, then freed g.cmdline_rcfile before using the copy. So it ended
up using a pointer to freed memory.
Stick with copying the pointer but defer freeing the original until
after its copy is no longer needed.
Fixes #832
"placing <mon> over itself ..." could be given by place_monster()
if the game crashed or the process was killed, recovering a save file ended
up with incorrect stairway connections between levels
+when using --nethackrc=file on the command line (currently only implemented
+ for ports that use unixmain.c), options parsing freed the string
+ containing 'file' before using it as the RC file name
curses: 'msg_window' option wasn't functional for curses unless the binary
also included tty support
if (g.cmdline_rcfile) {
namesrc = "command line";
nameval = g.cmdline_rcfile;
- free((genericptr_t) g.cmdline_rcfile), g.cmdline_rcfile = 0;
xtraopts = opts;
if (opts && (*opts == '/' || *opts == '\\' || *opts == '@'))
xtraopts = 0; /* NETHACKOPTIONS is a file name; ignore it */
(void) parseoptions(xtraopts, TRUE, FALSE);
config_error_done();
}
+
+ if (g.cmdline_rcfile)
+ free((genericptr_t) g.cmdline_rcfile), g.cmdline_rcfile = 0;
/*[end of nethackrc handling]*/
(void) fruitadd(g.pl_fruit, (struct fruit *) 0);