Date: Mon, 27 Oct 2008 20:53:46 +0100 From: clemens fischer <ino-news@spotteswoode.dnsalias.org> To: freebsd-questions@freebsd.org Subject: reviving games/freebsd-games Message-ID: <ariht5xulu1.ln2@nntp.spotteswoode.dnsalias.org>
next in thread | raw e-mail | index | archive | help
Some of the programs in games/freebsd-games, notably hack and larn, have the following problem: Given the declarations: char *scrollname[] = { char *potionname[] = { "\0enchant armor", "\0sleep", "\0enchant weapon", "\0healing", ... ... "\0 " "\0 " }; }; (in larn/data.c) the code continues to flag the availability of some scroll or potion by writing into the first byte of the strings in these arrays: for (i=0; i<MAXSCROLL; i++) scrollname[i][0]=' '; for (i=0; i<MAXPOTION; i++) potionname[i][0]=' '; This leads to SIGSEGV crashes. I think this came about with the gcc-4xx series of our compiler, but I'm not really sure. I verified that scrollname and potionname reside in the writable .data segment. The segv is reproducable. Does anybody know what is wrong with this code? I assume i could arrange for the flagging to be done in a separate data structure, but since the programs worked for years this way, I think there should be an easier way. -c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ariht5xulu1.ln2>