What on earth happened to platform.h?
Rob Landley
rob at landley.net
Sun Oct 24 00:27:18 UTC 2010
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 (sampo at iki.fi)
* 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.
More information about the busybox
mailing list