I need the ability to umount everything under a given directory (so I can do 
an rm -rf even after doing a lot of bind mounting and such in a chroot), and 
the obvious thing to do is make "umount -a" use its first argument (if any) as 
the prefix to umount everything under.  Since I wrote the busybox umount -a 
implementation as of a few years ago, it didn't seem hard to do.

Except there's all sorts of... STUFF in there.  For example, this is in 
umount.c.  It does not belong in umount.c

#if defined(__dietlibc__)
/* 16.12.2006, Sampo Kellomaki ([email protected])
 * dietlibc-0.30 does not have implementation of getmntent_r() */
static struct mntent *getmntent_r(FILE* stream, struct mntent* result,
                char* buffer UNUSED_PARAM, int bufsize UNUSED_PARAM)
{
        struct mntent* ment = getmntent(stream);
        return memcpy(result, ment, sizeof(*ment));
}
#endif

Last I checked dietlibc was too broken for words, and the _correct_ response 
to the complaint would have been "sounds like dietlibc should add that 
function then", but in any case that should be an inline living in platform.h.  
Dietlibc isn't umount.c's problem.

There's an also #ifndef PATH_MAX which clearly belongs in platform.h, before I 
even _get_ to the main function.  (Which is two lines of heavily annotated 
crap to start the function, but that's a separate rant.)

So I go look at platform.h, which has this:

#if defined(__GNU_LIBRARY__) && __GNU_LIBRARY__ < 5 && \
        !defined(__dietlibc__) && \
        !defined(_NEWLIB_VERSION) && \
        !(defined __digital__ && defined __unix__)
# error "Sorry, this libc version is not supported :("
#endif

What the...?  That's not even a #warning, that's an #error.  You added added 
extra complexity to REFUSE to work in an unknown environment, when specific 
apps might otherwise work.  What's the POINT of programming ot things like 
SUSv4 if you don't really mean it?

Good grief, you're not even checking for uClibc but just assuming that it will 
sufficiently pretend to be glibc.  You're not only perpetuating other people's 
mistakes, you're trying to top them: uClibc must pretend to be glibc because 
of all the packages out there that specifically CHECK for glibc, which is 
because THOSE PACKAGES ARE BROKEN.  You'd think you'd know better, that "all 
the world's glibc" is wrong, so instead of trying to be environment _agnostic_ 
you play whack-a-mole with the historical record.  Because nobody's ever going 
to come up with anything new without notifying you first.

By the way, if you're going to have the insane complextiy of "smallint" 
(apparently busybox is no longer about being simple), then where's your 
developer guide documenting it?  "grep -r smallint docs" returns nothing, and 
the word does not appear in the FAQ either.  New developers have to just hack 
on the code long enough to learn this by osmosis?

Is it some sort of project senility?  The older a project gets, the more 
layers of arterial plaque it accumulates until finally it's ossifies into an 
unmodifiable statue?  (xmms anyone?)

I spent my time on this project _removing_ as much code as I added.  I rewrote 
existing apps multiple times because I could make them _simpler_.  Is that 
still even a project goal?  Is all this overgrowth an oversight, or do you 
guys honestly  not _care_ about this stuff anymore?

When did simplicity stop being a goal?

Rob
-- 
GPLv3: as worthy a successor as The Phantom Menace, as timely as Duke Nukem 
Forever, and as welcome as New Coke.
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to