Skip site navigation (1)Skip section navigation (2)
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>