valgrind found a few leaks in the new cache cleaning code.
     struct stat        target_stat;
 
     dir_base = FcStrPlus (dir, "/");
+    if (!dir_base)
+    {
+       fprintf (stderr, "%s: out of memory\n", dir);
+       return FcFalse;
+    }
     if (access ((char *) dir, W_OK|X_OK) != 0)
     {
        if (verbose)
            printf ("%s: not cleaning unwritable cache directory\n", dir);
+       FcStrFree (dir_base);
        return FcTrue;
     }
     if (verbose)
     if (!d)
     {
        perror (dir);
+       FcStrFree (dir_base);
        return FcFalse;
     }
     while ((ent = readdir (d)))
                ret = FcFalse;
            }
        }
+       FcDirCacheUnload (cache);
         FcStrFree (file_name);
     }
     
     closedir (d);
+    FcStrFree (dir_base);
     return ret;
 }