steve@nuchat.UUCP (Steve Nuchia) (04/29/87)
Something's fishy here.... ulall() in expire.c attempts to
disect the list of names by which a condemned article is
known, then it executes a body of code that correctly
disposes of that article.
However, there seems to be a sepcial case that circumvents
most of the processing, including archiving. Observe:
/* Unlink (using unwound tail recursion) all the articles in 'artlist'. */
ulall(artlist, hp)
{
[...]
do {
[...]
while (*artlist == ' ' || *artlist == '\n' || *artlist == ',')
artlist++;
if (*artlist == '\0') return;
p = index(artlist, ' ');
if (p == NULL) {
last = 1;
p = index(artlist, '\n');
}
[this looks REAL fishy -- it seems to happen to the last name]
if (p == NULL) {
last = 1;
fn = dirname(artlist);
[look, ma! no verbose, no archive!]
if (UNLINK(fn) < 0 && errno != ENOENT)
perror(fn);
return;
}
[end of fishy part]
if (p) *p = 0;
[beginning of normal destruction sequence]
[...]
if (ngmatch(newname, ngpat)) {
if (doarchive)
[archive code here [...]]
if (verbose)
[etc...]
if (UNLINK(fn) < 0 && errno != ENOENT)
perror(fn);
}
[...]
artlist = p + 1;
} while (!last);
}
---------------
Ok, on another inspection I see that it only happens if the list
of names is not terminated with a newline. But WHY? I don't see
how things would work any less well without the fishy code...
unless its the "artlist = p + 1" you're worried about... That's
easy enough to fix... in fact it is fixed, since last has already
been set. Useless and dangerous code. Or have I missed
something? I'm running with the fishy section commented out,
although I see now that this probably isn't the reason my oldnews
directory wasn't growing. I probably need to rebuild my history
files. sigh.
This is a lot of lines for such a small problem, but I'll go
ahead and post it anyway... Tailbone (vestigal) code like this is
best exposed and removed as soon as possible.
steve