+ switch (errno) {
+ case ENOENT:
+ case ENOTDIR:
+ if (verbose)
+ printf ("skipping, no such directory\n");
+ FcFontSetDestroy (set);
+ FcStrSetDestroy (subdirs);
+ continue;
+ case EACCES:
+ case EROFS:
+ /* That's ok, caches go to /var anyway. */
+ /* Ideally we'd do an access on the hashed_name. */
+ /* But we hid that behind an abstraction barrier. */
+ break;
+ default:
+ fprintf (stderr, "\"%s\": ", dir);
+ perror ("");
+ ret++;
+
+ FcFontSetDestroy (set);
+ FcStrSetDestroy (subdirs);
+ continue;
+ }
+ }
+ if (stat ((char *) dir, &statb) == -1)
+ {
+ fprintf (stderr, "\"%s\": ", dir);
+ perror ("");
+ FcFontSetDestroy (set);
+ FcStrSetDestroy (subdirs);
+ ret++;
+ continue;
+ }
+ if (!S_ISDIR (statb.st_mode))
+ {
+ fprintf (stderr, "\"%s\": not a directory, skipping\n", dir);
+ FcFontSetDestroy (set);
+ FcStrSetDestroy (subdirs);
+ continue;
+ }
+
+ if (really_force)
+ FcDirCacheUnlink (dir, config);
+
+ if (!FcDirScanConfig (set, subdirs, FcConfigGetBlanks (config), dir, force, config))
+ {
+ fprintf (stderr, "\"%s\": error scanning\n", dir);
+ FcFontSetDestroy (set);
+ FcStrSetDestroy (subdirs);