[Libreoffice] [PATCH] Simple fix for fontconfig.cxx to review (from cppcheck report)

Ivan Timofeev timofeev.i.s at gmail.com
Sat Jan 14 21:48:28 PST 2012


Hi Mat,

15.01.2012 03:29, Mat M пишет:
> Hello
>
> Le Sat, 14 Jan 2012 16:00:31 +0100, julien2412 <serval2412 at yahoo.fr> a
> écrit:
>
>> Hello,
>>
>> cppcheck reported this :
>> core/vcl/generic/fontmanager/fontconfig.cxx
>> 196 duplicateExpression style Same expression on both sides of '-'
>>
>> class SortFont : public ::std::binary_function< const FcPattern*, const
>> FcPattern*, bool >
>> {
>> public:
>> bool operator()(const FcPattern *a, const FcPattern *b)
>> {
>> int comp = compareFontNames(a, b);
>> if (comp != 0)
>> return comp < 0;
>>
>> int nVersionA=0, nVersionB=0;
>>
>> bool bHaveA = FcPatternGetInteger(a, FC_FONTVERSION, 0,
>> &nVersionA) == FcResultMatch;
>> bool bHaveB = FcPatternGetInteger(b, FC_FONTVERSION, 0,
>> &nVersionB) == FcResultMatch;
>>
>> if (bHaveA && bHaveB)
>> return nVersionA > nVersionB;
>>
>> 196: return bHaveA - bHaveA;<--- Same expression on both sides of
>> '-'.
>> }
>> };
>>
>> If we follow the same logic as the function compareFontNames defined some
>> lines above in the same file :
>> int compareFontNames(const FcPattern *a, const FcPattern *b)
>> {
>> FcChar8 *pNameA=NULL, *pNameB=NULL;
>>
>> bool bHaveA = FcPatternGetString(a, FC_FAMILY, 0, &pNameA) ==
>> FcResultMatch;
>> bool bHaveB = FcPatternGetString(b, FC_FAMILY, 0, &pNameB) ==
>> FcResultMatch;
>>
>> if (bHaveA && bHaveB)
>> return strcmp((const char*)pNameA, (const char*)pNameB);
>>
>> return bHaveA - bHaveB;
>> }
>>
>> it seems it should be :
>> return bHaveA - bHaveB;
>>
>> Any idea ?
>>
> Subtracting booleans ??? Is there some magic here ?
> Moreover, if we state that boolean difference returns a boolean, is
> there an automatic cast, as the function should return an int ?

AFAIK in arithmetic bools are concerted to int so that true->1 and false->0.
Then, the result is converted back to bool (because the function returns 
bool) so that 0->false and 'any other value'->true.

So "return bool1 - bool2" can be replaced with not-so-magic "return 
bool1 != bool2", right?

By the way, the author of the code is Caolan, let's ask him. :)

Ivan



More information about the LibreOffice mailing list