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

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to