[Fontconfig] fontconfig: Branch 'master'
Behdad Esfahbod
behdad at behdad.org
Fri Dec 7 12:07:26 PST 2012
I was planning on removing the memory accounting stuff completely. I mean,
that's what tools like malloc-stats should deal with, not libraries themselves...
b
On 12-12-07 05:10 AM, Akira TAGOH wrote:
> src/fccfg.c | 2 ++
> src/fcinit.c | 16 ++++++++++------
> src/fclang.c | 26 ++++++++++++++++++++++++--
> src/fcstr.c | 5 ++---
> src/fcxml.c | 28 ++++++++++++++++------------
> 5 files changed, 54 insertions(+), 23 deletions(-)
>
> New commits:
> commit e7954674eb4f16d0fed3018cbefb4907c89d2465
> Author: Akira TAGOH <akira at tagoh.org>
> Date: Fri Dec 7 19:09:36 2012 +0900
>
> Fix the wrong estimation for the memory usage information in fontconfig
>
> diff --git a/src/fccfg.c b/src/fccfg.c
> index d3752e5..45b4869 100644
> --- a/src/fccfg.c
> +++ b/src/fccfg.c
> @@ -1743,6 +1743,8 @@ FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
> #else
> if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/')
> strcat ((char *) path, "/");
> + else
> + osize--;
> #endif
> strcat ((char *) path, (char *) file);
>
> diff --git a/src/fcinit.c b/src/fcinit.c
> index ab64012..aaf8637 100644
> --- a/src/fcinit.c
> +++ b/src/fcinit.c
> @@ -72,7 +72,7 @@ FcInitLoadConfig (void)
>
> if (config->cacheDirs && config->cacheDirs->num == 0)
> {
> - FcChar8 *prefix;
> + FcChar8 *prefix, *p;
> size_t plen;
>
> fprintf (stderr,
> @@ -81,12 +81,15 @@ FcInitLoadConfig (void)
> "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
> FC_CACHEDIR);
> prefix = FcConfigXdgCacheHome ();
> - plen = prefix ? strlen ((const char *)prefix) : 0;
> if (!prefix)
> goto bail;
> - prefix = realloc (prefix, plen + 12);
> - if (!prefix)
> + plen = prefix ? strlen ((const char *)prefix) : 0;
> + p = realloc (prefix, plen + 12);
> + if (!p)
> goto bail;
> + prefix = p;
> + FcMemFree (FC_MEM_STRING, plen + 1);
> + FcMemAlloc (FC_MEM_STRING, plen + 12);
> memcpy (&prefix[plen], FC_DIR_SEPARATOR_S "fontconfig", 11);
> prefix[plen + 11] = 0;
> fprintf (stderr,
> @@ -98,11 +101,12 @@ FcInitLoadConfig (void)
> bail:
> fprintf (stderr,
> "Fontconfig error: out of memory");
> - free (prefix);
> + if (prefix)
> + FcStrFree (prefix);
> FcConfigDestroy (config);
> return FcInitFallbackConfig ();
> }
> - free (prefix);
> + FcStrFree (prefix);
> }
>
> return config;
> diff --git a/src/fclang.c b/src/fclang.c
> index b7e70fc..65d22a9 100644
> --- a/src/fclang.c
> +++ b/src/fclang.c
> @@ -182,7 +182,7 @@ FcLangNormalize (const FcChar8 *lang)
> {
> FcChar8 *result = NULL, *s, *orig;
> char *territory, *encoding, *modifier;
> - size_t llen, tlen = 0, mlen = 0;
> + size_t llen, tlen = 0, mlen = 0, ssize;
>
> if (!lang || !*lang)
> return NULL;
> @@ -197,6 +197,10 @@ FcLangNormalize (const FcChar8 *lang)
> s = FcStrCopy (lang);
> if (!s)
> goto bail;
> + /* store the original length of 's' here to let FcMemFree know
> + * the correct size since we breaks 's' from now on.
> + */
> + ssize = strlen ((const char *)s) + 1;
>
> /* from the comments in glibc:
> *
> @@ -282,6 +286,11 @@ FcLangNormalize (const FcChar8 *lang)
> else
> {
> result = s;
> + /* we'll miss the opportunity to reduce the correct size
> + * of the allocated memory for the string after that.
> + */
> + FcMemFree (FC_MEM_STRING, ssize);
> + FcMemAlloc (FC_MEM_STRING, strlen((const char *)s) + 1);
> s = NULL;
> goto bail1;
> }
> @@ -295,6 +304,11 @@ FcLangNormalize (const FcChar8 *lang)
> else
> {
> result = s;
> + /* we'll miss the opportunity to reduce the correct size
> + * of the allocated memory for the string after that.
> + */
> + FcMemFree (FC_MEM_STRING, ssize);
> + FcMemAlloc (FC_MEM_STRING, strlen((const char *)s) + 1);
> s = NULL;
> goto bail1;
> }
> @@ -312,14 +326,22 @@ FcLangNormalize (const FcChar8 *lang)
> else
> {
> result = s;
> + /* we'll miss the opportunity to reduce the correct size
> + * of the allocated memory for the string after that.
> + */
> + FcMemFree (FC_MEM_STRING, ssize);
> + FcMemAlloc (FC_MEM_STRING, strlen((const char *)s) + 1);
> s = NULL;
> }
> bail1:
> if (orig)
> - free (orig);
> + FcStrFree (orig);
> bail0:
> if (s)
> + {
> free (s);
> + FcMemFree (FC_MEM_STRING, ssize);
> + }
> bail:
> if (FcDebug () & FC_DBG_LANGSET)
> {
> diff --git a/src/fcstr.c b/src/fcstr.c
> index 037960d..99b59da 100644
> --- a/src/fcstr.c
> +++ b/src/fcstr.c
> @@ -38,7 +38,6 @@ FcStrCopy (const FcChar8 *s)
> {
> int len;
> FcChar8 *r;
> -
> if (!s)
> return 0;
> len = strlen ((char *) s) + 1;
> @@ -1204,7 +1203,7 @@ FcStrSetAddLangs (FcStrSet *strs, const char *languages)
> if (normalized_lang)
> {
> FcStrSetAdd (strs, normalized_lang);
> - free (normalized_lang);
> + FcStrFree (normalized_lang);
> ret = FcTrue;
> }
> }
> @@ -1216,7 +1215,7 @@ FcStrSetAddLangs (FcStrSet *strs, const char *languages)
> if (normalized_lang)
> {
> FcStrSetAdd (strs, normalized_lang);
> - free (normalized_lang);
> + FcStrFree (normalized_lang);
> ret = FcTrue;
> }
> }
> diff --git a/src/fcxml.c b/src/fcxml.c
> index 72e9eaf..3a94af6 100644
> --- a/src/fcxml.c
> +++ b/src/fcxml.c
> @@ -1849,7 +1849,7 @@ static void
> FcParseDir (FcConfigParse *parse)
> {
> const FcChar8 *attr, *data;
> - FcChar8 *prefix = NULL;
> + FcChar8 *prefix = NULL, *p;
> #ifdef _WIN32
> FcChar8 buffer[1000];
> #endif
> @@ -1868,13 +1868,14 @@ FcParseDir (FcConfigParse *parse)
> size_t plen = strlen ((const char *)prefix);
> size_t dlen = strlen ((const char *)data);
>
> - FcMemFree (FC_MEM_STRING, plen + 1);
> - prefix = realloc (prefix, plen + 1 + dlen + 1);
> - if (!prefix)
> + p = realloc (prefix, plen + 1 + dlen + 1);
> + if (!p)
> {
> FcConfigMessage (parse, FcSevereError, "out of memory");
> goto bail;
> }
> + prefix = p;
> + FcMemFree (FC_MEM_STRING, plen + 1);
> FcMemAlloc (FC_MEM_STRING, plen + 1 + dlen + 1);
> prefix[plen] = FC_DIR_SEPARATOR;
> memcpy (&prefix[plen + 1], data, dlen);
> @@ -1947,7 +1948,7 @@ static void
> FcParseCacheDir (FcConfigParse *parse)
> {
> const FcChar8 *attr;
> - FcChar8 *prefix = NULL, *data;
> + FcChar8 *prefix = NULL, *p, *data;
>
> attr = FcConfigGetAttribute (parse, "prefix");
> if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0)
> @@ -1963,13 +1964,15 @@ FcParseCacheDir (FcConfigParse *parse)
> size_t plen = strlen ((const char *)prefix);
> size_t dlen = strlen ((const char *)data);
>
> - FcMemFree (FC_MEM_STRING, plen + 1);
> - prefix = realloc (prefix, plen + 1 + dlen + 1);
> - if (!prefix)
> + p = realloc (prefix, plen + 1 + dlen + 1);
> + if (!p)
> {
> FcConfigMessage (parse, FcSevereError, "out of memory");
> + data = prefix;
> goto bail;
> }
> + prefix = p;
> + FcMemFree (FC_MEM_STRING, plen + 1);
> FcMemAlloc (FC_MEM_STRING, plen + 1 + dlen + 1);
> prefix[plen] = FC_DIR_SEPARATOR;
> memcpy (&prefix[plen + 1], data, dlen);
> @@ -2043,7 +2046,7 @@ FcParseInclude (FcConfigParse *parse)
> const FcChar8 *attr;
> FcBool ignore_missing = FcFalse;
> FcBool deprecated = FcFalse;
> - FcChar8 *prefix = NULL;
> + FcChar8 *prefix = NULL, *p;
>
> s = FcStrBufDoneStatic (&parse->pstack->str);
> if (!s)
> @@ -2065,13 +2068,14 @@ FcParseInclude (FcConfigParse *parse)
> size_t plen = strlen ((const char *)prefix);
> size_t dlen = strlen ((const char *)s);
>
> - FcMemFree (FC_MEM_STRING, plen + 1);
> - prefix = realloc (prefix, plen + 1 + dlen + 1);
> - if (!prefix)
> + p = realloc (prefix, plen + 1 + dlen + 1);
> + if (!p)
> {
> FcConfigMessage (parse, FcSevereError, "out of memory");
> goto bail;
> }
> + prefix = p;
> + FcMemFree (FC_MEM_STRING, plen + 1);
> FcMemAlloc (FC_MEM_STRING, plen + 1 + dlen + 1);
> prefix[plen] = FC_DIR_SEPARATOR;
> memcpy (&prefix[plen + 1], s, dlen);
> _______________________________________________
> Fontconfig mailing list
> Fontconfig at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/fontconfig
>
--
behdad
http://behdad.org/
More information about the Fontconfig
mailing list