]> granicus.if.org Git - nethack/commit
fix "Patch for dos mode nethackrc file on linux"
authorPatR <rankin@nethack.org>
Fri, 25 Dec 2015 00:00:50 +0000 (16:00 -0800)
committerPatR <rankin@nethack.org>
Fri, 25 Dec 2015 00:00:50 +0000 (16:00 -0800)
commit9df552543bc2491e235047d1c86ccab2566e34ff
tree7b02b83e52e9c5893f12f6434e3a5f372851b8a7
parent1cddb2f717ccd9b229faa4e26b99c478e5ab1199
fix "Patch for dos mode nethackrc file on linux"

Reported directly to devteam (12 Dec), user had a config file originally
from MSDOS or Windows and used it on a linux system.  That works as-is
except when it contained an invalid option line.  Feedback was
"ad option line: "whatever-the-line-was
because of the carriage return character staying in the option buffer
after linefeed was stripped off from CR+LF line end.

He included a patch which replaced this existing fixup after fgets()
if ((p = index(buf, '\n')) != 0) *p = '\0';
with a loop over the whole string changing either '\n' or '\r' to '\0'.
This uses
if ((p = index(buf, '\n')) != 0) {
if (p > buf && *(p - 1) == '\r') --p;
*p = '\0';
}
instead.  Ordinarily I would have just cloned the original line and then
substituted \r for \n in the copy, but the report mentioned "I couldn't
get index to work with carriage return".  I don't know what he tried to
do or why simple index(buf,'\r') might not work as intended on his
platform, so I went with something that will work even if index()
behaves as strangely as the report suggested.

(We already have a couple of index(string,'\r') calls in use, but I'm
not going to change those unless someone complains about a problem.)
doc/fixes36.1
src/files.c