+ qsort(dirlist->strs, dirlist->num, sizeof(FcChar8 *), cmpstringp);
+ qsort(filelist->strs, filelist->num, sizeof(FcChar8 *), cmpstringp);
+
+ for (i = 0; i < filelist->num; i++)
+ FcFileScanFontConfig (tmpSet, blanks, filelist->strs[i], config);
+
+ if (FcShouldWriteFiles ())
+ {
+ /*
+ * Now that the directory has been scanned,
+ * write out the cache file
+ */
+ FcDirCacheWrite (tmpSet, dirlist, dir, config);
+ }
+
+ /*
+ * Add the discovered fonts to our internal non-cache list
+ */
+ for (i = 0; i < tmpSet->nfont; i++)
+ FcFontSetAdd (set, tmpSet->fonts[i]);
+
+ /*
+ * the patterns in tmpset now belong to set; don't free them
+ */
+ tmpSet->nfont = 0;
+
+ /*
+ * Add the discovered directories to the list to be scanned
+ */
+ for (i = 0; i < dirlist->num; i++)
+ if (!FcStrSetAdd (dirs, dirlist->strs[i])) {
+ ret = FcFalse;
+ goto bail3;
+ }
+
+ bail3:
+ FcStrSetDestroy (filelist);
+ bail2:
+ FcStrSetDestroy (dirlist);
+ bail1:
+ FcFontSetDestroy (tmpSet);
+
+ bail0:
+ closedir (d);
+
+ free (file);