Re: fontconfig issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
const char* FontConfig::Find(const char* family, bool isBold, bool isItalic)
{
               const char* filename = NULL;
               int weight = FC_WEIGHT_MEDIUM;
        if(isBold) {
                weight = FC_WEIGHT_BOLD;
        }
        int slant = FC_SLANT_ROMAN;
        if(isItalic) {
                slant = FC_SLANT_ITALIC;
        }
        FcPattern* pattern = FcPatternBuild(NULL,
                                                        FC_SCALABLE, FcTypeBool, true,
                                                        FC_FAMILY, FcTypeString, family,
                                                        FC_WEIGHT, FcTypeInteger, weight,
                                                        FC_SLANT, FcTypeInteger, slant,
                                                        NULL);
        if(pattern) {
                FcConfigSubstitute(0, pattern, FcMatchPattern);
                FcDefaultSubstitute(pattern);
                FcResult result;
                FcPattern* match = FcFontMatch(0, pattern, &result);
                if(match) {
                        FcChar8* str = 0;
                        if(FcPatternGetString(match, FC_FILE, 0, &str) == FcResultMatch) {
                          filename = (const char*)str;
                        }
                        FcPatternDestroy(match);---------------------------------------added newly
                }
                FcPatternDestroy(pattern);
        }
        printf("return from FontConfig::Find\n");
        return filename;
}


since const char* filename = NULL; i have to set the filename pointer with str.I cannot copy rite..

With this change now that error has gone ,but still two more FcFontMatch errors are dere
i.e

284 bytes in 7 blocks are possibly lost in loss record 97 of 140
==17210==    at 0x4024F20: malloc (vg_replace_malloc.c:236)
==17210==    by 0x4C667A6: FcStrStaticName (fcpat.c:1065)
==17210==    by 0x4C678AF: FcValueSave (fcpat.c:101)
==17210==    by 0x4C679B2: FcPatternObjectAddWithBinding (fcpat.c:485)
==17210==    by 0x4C681CB: FcPatternObjectAdd (fcpat.c:537)
==17210==    by 0x4C64287: FcFontRenderPrepare (fcmatch.c:420)
==17210==    by 0x4C644C7: FcFontMatch (fcmatch.c:564)
==17210==    by 0x4B344C4: FontConfig::Find(char const*, bool, bool) (unixfontconfig.cpp:77)
==17210==    by 0x4B3439C: FontConfig::FindFont(char const*, bool, bool) (unixfontconfig.cpp:50)
==17210==    by 0x4B3523A: SIInterface::SI_CreateFont(MM_Object*, FI_FontInfo const*, void**) (SITextDrawImpl.cpp:324)
==17210==    by 0x625BDE7: HostCallback2<unsigned short, FI_FontInfo const*, void**>::Invoke(void*) (si_wrappers.cpp:130)
==17210==    by 0x63A1331: CorePlayer::InvokeHostCallback(VirtualHostCallback&) (splayer.cpp:12240)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

16 bytes in 1 blocks are possibly lost in loss record 33 of 140
==17210==    at 0x4024F20: malloc (vg_replace_malloc.c:236)
==17210==    by 0x4C667A6: FcStrStaticName (fcpat.c:1065)
==17210==    by 0x4C68283: FcPatternObjectAddString (fcpat.c:655)
==17210==    by 0x4C5A570: FcDefaultSubstitute (fcdefault.c:167)
==17210==    by 0x4B344AA: FontConfig::Find(char const*, bool, bool) (unixfontconfig.cpp:75)
==17210==    by 0x4B3439C: FontConfig::FindFont(char const*, bool, bool) (unixfontconfig.cpp:50)
==17210==    by 0x4B3523A: SIInterface::SI_CreateFont(MM_Object*, FI_FontInfo const*, void**) (SITextDrawImpl.cpp:324)
==17210==    by 0x625BDE7: HostCallback2<unsigned short, FI_FontInfo const*, void**>::Invoke(void*) (si_wrappers.cpp:130)
==17210==    by 0x63A1331: CorePlayer::InvokeHostCallback(VirtualHostCallback&) (splayer.cpp:12240)
==17210==    by 0x62550B9: MM_SI_CreateFont(PlatformPlayer*, FI_FontInfo const*, void**) (si_wrappers.cpp:1067)
==17210==    by 0x6242DA8: PlatformEDevice::CreatePlatformFont(PlatformECharFormat*, int, unsigned char) (FL_fonts.cpp:1157)
==17210==    by 0x62422EA: PlatformEDevice::SetCharFormat(PlatformECharFormat*, int) (FL_fonts.cpp:640)
==17210==
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Archana.

On Thu, May 17, 2012 at 12:13 PM, Akira TAGOH <akira@xxxxxxxxx> wrote:
On Thu, May 17, 2012 at 2:51 PM, Archana Mathari <archnavnr24@xxxxxxxxx> wrote:
> Hi,
>
> Yes, i am able to see many errors related to FcFontMatch in
> valgrind..FcPatternDestroy() function is called after FcFontMatch() in my
> code below is the function......
>
>  FcPattern* match = FcFontMatch(0, pattern, &result);
>                 if(match) {
>                         FcChar8* str = 0;
>                         if(FcPatternGetString(match, FC_FILE, 0, &str) ==
> FcResultMatch) {
>                                 filename = (const char*)str;
>                         }
>                 }
>                 FcPatternDestroy(pattern);
>         }
>         printf("return from FontConfig::Find\n");
>         return filename;
> }

You have to call FcPatternDestroy() for "match" too. due to that, you
need to copy "str" to "filename" instead of set a pointer.

--
Akira TAGOH

_______________________________________________
Fontconfig mailing list
Fontconfig@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/fontconfig

[Index of Archives]     [Fedora Fonts]     [Fedora Users]     [Fedora Cloud]     [Kernel]     [Fedora Packaging]     [Fedora Desktop]     [PAM]     [Gimp Graphics Editor]     [Yosemite News]

  Powered by Linux