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.
This commit is contained in:
Keith Packard 2006-09-02 14:52:37 -07:00
parent 813258dc8e
commit 9b511b2905
4 changed files with 17 additions and 28 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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 (;;) {