More status report

Russ Allbery rra at stanford.edu
Fri Jun 29 22:06:43 UTC 2001


I'm currently at Usenix and before that had been really busy, so I've not
been responding to e-mail hardly at all, including some fairly important
stuff.  Sorry about that.  :/  If you've sent me e-mail, don't worry I
have it and will try to respond as soon as I can (which may not be until
next week).

The good news is that while I mostly don't have network during the days, I
have been getting a bunch of work done on my laptop.  I'm committing some
of that right now.

The libstorage build system finally annoyed me enough to rewrite it, and
that's going in now.  I merged buildconfig and ovbuildconfig, merged the
makefile fragments that were generated, and hopefully made the Perl code
more readable or at least reduced code duplication.

As part of the configuration overhaul, I'm converting all uses of
cpcatpath in the tree to concatpath, since cpcatpath is part of getconfig
(which is going away).  This has the advantage that concatpath dynamically
allocates memory as necessary whereas cpcatpath used a static buffer,
making the new code more robust.  (cpcatpath was only used for local
configuration data, so this isn't a security issue, just a robustness
issue.)

I'm adding a portable/mmap.h header similar to the other portable/*.h
headers to do the right stuff with mmap.  This introduces two new macros,
mmap_invalidate() and mmap_flush(), that can be used instead of the #if
maze around msync on those platforms without unified buffer caches.  It
also handles making madvise go away on platforms that don't have it, so
that it can be used without #if wrapping.

The oroginal implementation of lib/vector.c used the same data structure
to store both pointers to external strings and vectors that allocate their
own space.  This was cute and meant that I could use the same code for
both types, but it broke the C type system, since the former type of
vector can hold const char strings but the latter type can't.  I've
therefore broken it up into a struct vector (with allocated strings) and a
struct cvector (that holds const char *'s instead), and provided two sets
of functions.  This would be easy to handle in C++; in C, it requires a
bit of code duplication and some ugliness, unfortunately, but I think all
the ugliness will be localized to lib/vector.c.  This is also going in
shortly along with the test suite.

While I was at it, I also fixed the dbm problem on some versions of Linux
with ckpasswd.c and tracked down a few other bugs that were turned up by
the test suite on Linux.  The test suite will pass 100% after I finish
checking in my changes on Linux (with some skipped tests, since Linux
glibc 2.2 doesn't support RLIMIT_DATA -- it exists but is just ignored --
and therefore failure of xmalloc can't be tested on Linux).

-- 
Russ Allbery (rra at stanford.edu)             <http://www.eyrie.org/~eagle/>


More information about the inn-workers mailing list