summaryrefslogtreecommitdiff
path: root/pango/mini-xft/minixftdir.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/mini-xft/minixftdir.c')
-rw-r--r--pango/mini-xft/minixftdir.c136
1 files changed, 136 insertions, 0 deletions
diff --git a/pango/mini-xft/minixftdir.c b/pango/mini-xft/minixftdir.c
new file mode 100644
index 00000000..c6eacb10
--- /dev/null
+++ b/pango/mini-xft/minixftdir.c
@@ -0,0 +1,136 @@
+/*
+ * $XFree86: xc/lib/MiniXft/xftdir.c,v 1.3 2001/05/16 10:32:54 keithp Exp $
+ *
+ * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <dirent.h>
+#include <stdlib.h>
+#include <string.h>
+#include "minixftint.h"
+
+Bool
+MiniXftDirScan (MiniXftFontSet *set, const char *dir, Bool force)
+{
+ DIR *d;
+ struct dirent *e;
+ char *file;
+ char *base;
+ MiniXftPattern *font;
+ char *name;
+ int count;
+ Bool ret = True;
+ int id;
+
+ file = (char *) malloc (strlen (dir) + 1 + 256 + 1);
+ if (!file)
+ return False;
+
+ strcpy (file, dir);
+ strcat (file, "/");
+ base = file + strlen (file);
+ if (!force)
+ {
+ strcpy (base, "MiniXftCache");
+
+ if (MiniXftFileCacheReadDir (set, file))
+ {
+ free (file);
+ return True;
+ }
+ }
+
+ d = opendir (dir);
+ if (!d)
+ {
+ free (file);
+ return False;
+ }
+ while (ret && (e = readdir (d)))
+ {
+ if (e->d_name[0] != '.')
+ {
+ id = 0;
+ strcpy (base, e->d_name);
+ do
+ {
+ if (!force)
+ name = MiniXftFileCacheFind (file, id, &count);
+ else
+ name = 0;
+ if (name)
+ {
+ font = MiniXftNameParse (name);
+ if (font)
+ MiniXftPatternAddString (font, XFT_FILE, file);
+ }
+ else
+ {
+ font = MiniXftFreeTypeQuery (file, id, &count);
+ if (font && !force)
+ {
+ char unparse[8192];
+
+ if (MiniXftNameUnparse (font, unparse, sizeof (unparse)))
+ {
+ (void) MiniXftFileCacheUpdate (file, id, unparse);
+ }
+ }
+ }
+ if (font)
+ {
+ if (!MiniXftFontSetAdd (set, font))
+ {
+ MiniXftPatternDestroy (font);
+ font = 0;
+ ret = False;
+ }
+ }
+ id++;
+ } while (font && ret && id < count);
+ }
+ }
+ free (file);
+ closedir (d);
+ return ret;
+}
+
+Bool
+MiniXftDirSave (MiniXftFontSet *set, const char *dir)
+{
+ char *file;
+ char *base;
+ Bool ret;
+
+ file = (char *) malloc (strlen (dir) + 1 + 256 + 1);
+ if (!file)
+ return False;
+
+ strcpy (file, dir);
+ strcat (file, "/");
+ base = file + strlen (file);
+ strcpy (base, "MiniXftCache");
+ ret = MiniXftFileCacheWriteDir (set, file);
+ free (file);
+ return ret;
+}
+