[xmlsec] Little logic error

Aleksey Sanin aleksey at aleksey.com
Mon Oct 21 09:22:27 PDT 2002


The problem is that if the new compiler does not support __FUNCTION__ and
we do not have it in the list

#if defined(__A_COMPILER__) && (__A_COMPILER__ < X)
#define __FUNCTION__ ""
#endif

then there eill be misterious errors during compilation like:
   ..\src\bn.c(208) : warning C4024: 'xmlSecError' : different types for 
formal and
   actual parameter 3

IMHO, in all cases we will need to list either all compilers that 
supports __FUNCTION__
or all compilers that do not support __FUNCTIN__ :( I think the question 
is which list
is bigger and it looks like now we have only one compiler that does not 
(MSC < 0013).
So you win  :)

Thanks for taking care of this!

Aleksey



Igor Zlatkovic wrote:

> That is the inverted logic which gives the same pain: every compiler 
> having __FUNCTION__ will need to be included in the first predicate. 
> For example, if Borland, Watcom, Symantec, Forte and IBM do support it 
> at least since some version, it becomes
>
>   #if defined(__GNUC__) || (_MSC_VER >= 1300) || \
>     (__BORLANDC__ >= 4) || (_WATCOM >= 5213) ||  \
>     defined(__NORTONC__) || defined(__SUNC__) || \
>     (_IBM_AIX_C_COMPILER_WHATEVER >= 123123) ...
>
> and that results in exactly the mess I wanted to avoid :-)
>
> Having one conditional per compiler which has problems with 
> __FUNCTION__ would make things a little bit more readable. Okay, GNUC 
> and MSVC might be the only compilers used for xmlsec today, but 
> history shows this can change very rapidly.
>
> Ciao
> Igor
>
> Aleksey Sanin wrote:
>
>> What about:
>>
>>  #if defined (__GNUC__) || (_MSC_VER >= 1300)
>>  #define DUMMY
>>  #else
>>  #define __FUNCTION__ ""
>>  #endif
>>
>>
>> Aleksey
>>
>> Igor Zlatkovic wrote:
>>
>>> Hi there,
>>>
>>> There is a small error of mine in include/xmlsec/errors.h regarding the
>>> __FUNCTION__ logic. The current predicate is
>>>
>>>   #if !defined(__GNUC__) || (_MSC_VER >= 1300)
>>>
>>> which I wrongly assumed would work, on a gloomy day well past 
>>> midnight. In
>>> fact, this predicate always fires on everything other than GNUC, 
>>> because
>>> __GNUC__ is not defined.
>>>
>>> The truth is, that the correct predicate cannot be conducted 
>>> generally, but
>>> every offending compiler must bring its own toys. That brings us to
>>> something like
>>>
>>>   #if defined(__A_COMPILER__) && (__A_COMPILER__ < X)
>>>   #define __FUNCTION__ ""
>>>   #endif
>>>
>>> with "__A_COMPILER__" being whatever the current compiler 
>>> predefines. Every
>>> compiler brand which does not support __FUNCTION__ will need its own
>>> construct like the above.
>>>
>>> I now fixed the predicate to handle the MSVC compiler version lower 
>>> than 13.
>>> If there is someone using a compiler other than GNUC or MSVC, please 
>>> drop me
>>> a correct predicate for your compiler, if it doesn't support the 
>>> builtin
>>> __FUNCTION__ macro.
>>>
>>> Or does someone have a better idea?
>>>
>>> Ciao
>>> Igor
>>
>
> _______________________________________________
> xmlsec mailing list
> xmlsec at aleksey.com
> http://www.aleksey.com/mailman/listinfo/xmlsec






More information about the xmlsec mailing list