On Sat, Aug 10, 2013 at 6:37 PM, Irek Szczesniak <[email protected]> wrote:
> On Sat, Aug 10, 2013 at 7:46 AM, Glenn Fowler <[email protected]> wrote:
>>
>> On Fri, 9 Aug 2013 21:30:32 +0200 Irek Szczesniak wrote:
>>> On Fri, Aug 9, 2013 at 9:07 PM, Irek Szczesniak <[email protected]> 
>>> wrote:
>>> > Fedora 19 is *again* missing the #define O_SEARCH to define O_SEARCH
>>> > as alias to O_PATH.
>>
>>> This broke a while ago when #define __USE_GNU 1 was moved to
>>> src/lib/libast/features/standards. Nice attempt but won't work because
>>> __USE_GNU is an internal flag of the Linux kernel headers and is unset
>>> by the normal includes in /usr/include. Worst of all the Linux
>>> includes are broken and only reveal O_PATH if used with __USE_GNU=1.
>>
>>> What I don't understand: Roland added a safeguard against malfunctions:
>>> /*
>>>  * 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.
>
>>> Wasted time: 2h 17 minutes to find out that O_SEARCH was unavailable
>>> in our application. Anyone wanna pay?

FYI I was ranting about the removal of this #error in fcntl.c:
/*
 * 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.

Irek
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to