From 9b511b290548ad2920cda94507a3311efc461e8a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 2 Sep 2006 14:52:37 -0700 Subject: [PATCH] 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. --- fc-cache/fc-cache.c | 2 +- fc-cat/fc-cat.c | 2 +- src/fcdir.c | 17 ++++------------- src/fcstr.c | 24 +++++++++++------------- 4 files changed, 17 insertions(+), 28 deletions(-) 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 (;;) { -- 2.39.5