[snip]
Post by Glenn FowlerPost by Irek SzczesniakPost by Irek SzczesniakPost by Irek Szczesniak/*
* Make sure _GNU_SOURCE is active on Linux. Some versions
* give us serious trouble in this case so we have this
* assert to *abort* early instead of let us hunt for "ghost
* bugs"
*/
#ifdef __linux__
#ifndef __USE_GNU
#error "ASSERT: __USE_GNU should be defined by now"
#endif
#endif
This had been introduced to *prevent* this from happening. WTF was
this assertion removed? This is really the kind of regression which
should NEVER happen because it fucks up the rest of the applications.
I have to apologies for the explicit language. Imagine being under
pressure and then find a regression. A regression for which was
considered impossible because multiple layers of safeguards had been
established to make the AST build fail the hard way in case of a
regression.
Post by Irek SzczesniakWasted time: 2h 17 minutes to find out that O_SEARCH was unavailable
in our application. Anyone wanna pay?
/*
* Make sure _GNU_SOURCE is active on Linux. Some versions
* give us serious trouble in this case so we have this
* assert to *abort* early instead of let us hunt for "ghost
* bugs"
*/
#ifdef __linux__
#ifndef __USE_GNU
#error "ASSERT: __USE_GNU should be defined by now"
#endif
#endif
If #error is triggered then you have no __USE_GNU. Which results in
zero extensions like O_DIRECTORY or O_DIRECT, or on Linux >=3.1 no
O_PATH.
What was the reason for removing that #error? If its triggered then
you have problems and removing the #error doesn't remove the problems
for you.
I don't like programming in build bombs -- its hard enough getting builds to work
Erm... in this case it's IMO better to bomb out early than letting
people search forever in other parts of AST.
Please remember this comment:
-- snip --
/*
* O_PATH is a Linux's variation of O_SEARCH. Since this is treated
* as extension it may not be available without _GNU_SOURCE.
* Even even with _GNU_SOURCE some Linux platforms have bugs in their
* headers which prevents the definition of O_PATH in some hideous
* cases. To prevent all this mess we just grab the octal value and
* define it as O_SEARCH.
* Do not change this. You'll end-up in hell, together with the Linux
* headers. Quickly. - rm
-- snip --
... I usually don't write such comments. This one was born out of very
very bad pain of figuring out why it happens. And that's why I added
the very fatal assert for |__USE_GNU| to ensure that if that logic
fails I don't have to search much further.
Post by Glenn FowlerI was concerned that some linux variants + FEATURE/standards might crash a build when
O_PATH etc. are not supported
Erm... that can't happen because my original assert tests for
|__USE_GNU| and _not_ |O_PATH| ...
Post by Glenn FowlerI'd be willing to add a build triggerred regression report that
lists missing/emulated functionality -- for starters it could be
a small C program that #ifndef's critical macros and lists them at the end of the build
Grumpf... the issue is that over time such a report would get very
large and likely quickly ignored because it's not _fatal_ (first rule
of management with IT people: Noone reads reports unless the managers
do this with their staff at the meetings).
The regression that O_PATH doesn't work crept in several alpha
releases ago and ruined a couple of other things quite badly because
they aren't tested properly anymore (while I thought they are tested
because the assert guards against such mistakes from h*ll).
Post by Glenn Fowler#ifdef __linux__
#if !O_SEARCH
printf("package: panic: *** O_SEARCH should be defined in <ast_fcntl.h>\n");
#endif
#endif
Well... we need to figure out the Linux version and make that an
#error for Linux >= 3.0.0 ... otherwise it's IMO a waste of good code
space... ;-(
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) roland.mainz at nrubsig.org
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 3992797
(;O/ \/ \O;)