From: Keith Packard Date: Sat, 2 Sep 2006 21:52:37 +0000 (-0700) Subject: Unify directory canonicalization into FcStrAddFilename. X-Git-Tag: 2.3.96~9 X-Git-Url: https://git.wh0rd.org/?p=fontconfig.git;a=commitdiff_plain;h=9b511b290548ad2920cda94507a3311efc461e8a Unify directory canonicalization into FcStrAddFilename. Instead of making filename canonicalization occur in multiple places, it occurs only in FcStrAddFilename now, as all filenames pass through that function at one point. --- diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c index 0686481..f20d3a7 100644 --- a/fc-cache/fc-cache.c +++ b/fc-cache/fc-cache.c @@ -452,7 +452,7 @@ main (int argc, char **argv) } while (argv[i]) { - if (!FcStrSetAdd (dirs, (FcChar8 *) argv[i])) + if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i])) { fprintf (stderr, "%s: Can't add directory\n", argv[0]); return 1; diff --git a/fc-cat/fc-cat.c b/fc-cat/fc-cat.c index 71b416f..bb804ab 100644 --- a/fc-cat/fc-cat.c +++ b/fc-cat/fc-cat.c @@ -321,7 +321,7 @@ main (int argc, char **argv) { for (; i < argc; i++) { - if (!FcStrSetAdd (args, argv[i])) + if (!FcStrSetAddFilename (args, argv[i])) { fprintf (stderr, "%s: malloc failure\n", argv[0]); return 1; diff --git a/src/fcdir.c b/src/fcdir.c index 0b7c8d8..8da50e9 100644 --- a/src/fcdir.c +++ b/src/fcdir.c @@ -234,26 +234,17 @@ FcCache * FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config) { FcCache *cache = NULL; - FcChar8 *canon_dir; - canon_dir = FcStrCanonFilename (dir); - if (!canon_dir) canon_dir = (FcChar8 *) dir; - - if (config && !FcConfigAcceptFilename (config, canon_dir)) { - goto bail; - } + if (config && !FcConfigAcceptFilename (config, dir)) + return NULL; /* Try to use existing cache file */ if (!force) - cache = FcDirCacheLoad (canon_dir, config, NULL); + cache = FcDirCacheLoad (dir, config, NULL); /* Not using existing cache file, construct new cache */ if (!cache) - cache = FcDirCacheScan (canon_dir, config); - -bail: - if (canon_dir != dir) - free (canon_dir); + cache = FcDirCacheScan (dir, config); return cache; } diff --git a/src/fcstr.c b/src/fcstr.c index b83a709..3309014 100644 --- a/src/fcstr.c +++ b/src/fcstr.c @@ -764,26 +764,21 @@ FcStrCopyFilename (const FcChar8 *s) if (*s == '~') { FcChar8 *home = FcConfigHome (); + FcChar8 *full; int size; if (!home) return 0; size = strlen ((char *) home) + strlen ((char *) s); - new = (FcChar8 *) malloc (size); + full = (FcChar8 *) malloc (size); if (!new) return 0; - FcMemAlloc (FC_MEM_STRING, size); - strcpy ((char *) new, (char *) home); - strcat ((char *) new, (char *) s + 1); + strcpy ((char *) full, (char *) home); + strcat ((char *) full, (char *) s + 1); + new = FcStrCanonFilename (full); + free (full); } else - { - int size = strlen ((char *) s) + 1; - new = (FcChar8 *) malloc (size); - if (!new) - return 0; - FcMemAlloc (FC_MEM_STRING, size); - memcpy (new, s, size); - } + new = FcStrCanonFilename (s); return new; } @@ -841,6 +836,7 @@ FcStrCanonFilename (const FcChar8 *s) FcChar8 *file; FcChar8 *f; const FcChar8 *slash; + int size; if (*s != '/') { @@ -855,9 +851,11 @@ FcStrCanonFilename (const FcChar8 *s) FcStrFree (full); return file; } - file = malloc (strlen ((char *) s) + 1); + size = strlen ((char *) s) + 1; + file = malloc (size); if (!file) return NULL; + FcMemAlloc (FC_MEM_STRING, size); slash = NULL; f = file; for (;;) {