Here's an updated patch that takes into account both Jon's and Julien's comments (and fixes the endless loop).

Cheers

Rémi
From 728713079b107da84f3faf1c861d2aa8d644bde3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Cardona?= <[email protected]>
Date: Mon, 14 Sep 2009 17:09:59 +0200
Subject: [PATCH] dix: append "built-ins" to the font path in SetDefaultFontPath
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

49b93df8a3002db7196aa3fc1fd8dca1c12a55d6 made the hard dependency on
a "fixed" font go away but only Xorg could use the built-ins fonts by
default.

With this commit, all DDXs get "built-ins" appended to their FontPath, not
just Xorg.

Tested with Xorg, Xvfb and Xnest.

Signed-off-by: Rémi Cardona <[email protected]>
---
 dix/dixfonts.c                 |   27 +++++++++++++++++++++++++--
 hw/xfree86/common/xf86Config.c |   16 ----------------
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 7d7ae71..d0a46c7 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1810,6 +1810,9 @@ SetFontPath(ClientPtr client, int npaths, unsigned char 
*paths, int *error)
 int
 SetDefaultFontPath(char *path)
 {
+    char       *temp_path,
+               *start,
+               *end;
     unsigned char *cp,
                *pp,
                *nump,
@@ -1820,12 +1823,31 @@ SetDefaultFontPath(char *path)
                 size = 0,
                 bad;
 
+    /* ensure temp_path contains "built-ins" */
+    start = path;
+    while (1) {
+       start = strstr(start, "built-ins");
+       if (start == NULL)
+           break;
+       end = start + strlen("built-ins");
+       if ((start == path || start[-1] == ',') && (!*end || *end == ','))
+           break;
+       start = end;
+    }
+    if (!start) {
+       temp_path = Xprintf("%s%sbuilt-ins", path, *path ? "," : "");
+    } else {
+       temp_path = Xstrdup(path);
+    }
+    if (!temp_path)
+        return BadAlloc;
+
     /* get enough for string, plus values -- use up commas */
-    len = strlen(path) + 1;
+    len = strlen(temp_path) + 1;
     nump = cp = newpath = xalloc(len);
     if (!newpath)
        return BadAlloc;
-    pp = (unsigned char *) path;
+    pp = (unsigned char *) temp_path;
     cp++;
     while (*pp) {
        if (*pp == ',') {
@@ -1844,6 +1866,7 @@ SetDefaultFontPath(char *path)
     err = SetFontPathElements(num, newpath, &bad, TRUE);
 
     xfree(newpath);
+    xfree(temp_path);
 
     return err;
 }
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index e81eb0f..82c3993 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -614,22 +614,6 @@ configFiles(XF86ConfFilesPtr fileconf)
        pathFrom = X_DEFAULT;
     temp_path = defaultFontPath ? defaultFontPath : "";
 
-    /* ensure defaultFontPath contains "built-ins" */
-    start = strstr(temp_path, "built-ins");
-    end = start + strlen("built-ins");
-    if (start == NULL ||
-       !((start == temp_path || start[-1] == ',') && (!*end || *end == ','))) {
-       defaultFontPath = Xprintf("%s%sbuilt-ins",
-                                 temp_path, *temp_path ? "," : "");
-       if (must_copy == TRUE) {
-           if (defaultFontPath != NULL) {
-               must_copy = FALSE;
-           }
-       } else {
-           /* already made a copy of the font path */
-           xfree(temp_path);
-       }
-    }
     /* xf86ValidateFontPath modifies its argument, but returns a copy of it. */
     temp_path = must_copy ? xnfstrdup(defaultFontPath) : defaultFontPath;
     defaultFontPath = xf86ValidateFontPath(temp_path);
-- 
1.6.5.rc1

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to