heart_beat() is not shadowable
-----
need a way to tell the driver to try reconnecting to the addr_server
after it has gone down and come back up (the addr_server). maybe
the driver could just retry every now and then?
--john
-----
read_file() doesn't guarantee that a "/" is at the start of the filename
before passing to valid_read()...same problem might exist with
write_file(), read_bytes(), write_bytes(), didn't check yet
(ucs_brf@pip.shsu.edu)
Comment:
This problem is rather common in the driver currently. Internally,
filenames have no leading '/'. One should probably be added every time
a filename is passed to the mudlib.
-----
hm, Linux apparently doesn't let you open a directory for reading. boggle.
so all the efuns that read from a file will screw up if you try
to use a dir as the file. ack
ucs_brf@pip.shsu.edu
-----
sprintf.c should probably be rewritten as it has a nasty habit of
munging the stack and writing to places without checking the destination
type if it's ok; probably should also remove need for setjmp/longjmp;
also: err = setjmp(...) is non strict ANSI portable according to SAS
tech support for their C compiler (SAS/C)
-----
mixed a;
do {} while (a = ({ a, "" }));
Profezzorn@TMI-2
Comment:
It would be nice if things like this, where all the memory (VM too)
is sucked up by a runaway program, didn't cause the driver to
shutdown ("Out of memory").
### Nope, this evals out, need to do more work to make it run out of memory
-Sym (note: which is not the same as if the driver errors with "Out
of memory)
-----
Currently, binaries are not checked to see if they are out of date with
respect to the simul_efun object, causing wierd behavior of binaries of
the order of the simuls changes, and then a binary is loaded.
------
edit_source should check for the existence of a.out to see if compilation
succeeded. The exit code of the compiler is correct alot, but not on
all systems. Should probably use -o somefile instead of assuming a.out
as well.
-----
Line numbers get messed up when files don't end in a newline?
-----
Range/switch search should be binary, not linear. (in LPC->C)
-----
Probably need a test to see if bison's output actually compiles in
./build.Mudos; on alot of AIX systems bison's use of alloca() fails.
-Beek
-------
The current implementation of swapping could use alot of work. Swapping
an object in/out isn't that expensive CPU wise, and can save a decent amount
of memory. The problem is that cloned programs can't swap, which disables
swapping for much of the mud ...
-Beek
-----
eval string s = "xyz"; s[1] = 0; return s + "foo";
Isn't handled right, since after s[1] = 0 the length is still 3.
Several possible ways to fix this:
(1) allow strings to contain zero, and nuke the buffer type (requires a
number of mods like strcpy() -> memcpy() throughout the source)
(2) claim that assigning 0 to a char lvalue is a runtime error (the easy
way out :) )
(3) Actually truncate the string and modify it's length. This is really
messy b/c it requires char lvalues to keep a pointer to the start as
well, and also is somewhat counterintuitive.
---
One can call private functions in inherited objects via call_out.
---
livings() and heart_beats() don't obey set_hide()
---
verbs that no longer have handlers should be deleted from the parser list
---
Line numbers can be screwed up by macro expansion. Consider the following:
#define IGNORE(x)
#define USE_ONCE(x) x
#define USE_TWICE(x) x
// The end of the next line never gets counted.
IGNORE("foo\
bar")
// The end of the next line is counted once.
USE_ONCE("foo\
bar")
// The end of the next line is counted twice.
USE_TWICE("foo\
bar")
So the IGNORE() and USE_TWICE() cases with screw up line numbering.
Fixing this is non-trivial, since macro expansions are reinserted into
the input stream. Outside of quotes, it was handled by replacing
'\n' with ' ' which is semantically equivalent. Inside quotes, one has
to do something like count the newlines as they are parsed, and then
have add_input() keep track of how many artificial newlines it has created,
so these can be ignored, which requires a check every time current_line++
is done ...
There must be a better fix :)